<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hello World</title><link>https://harryho.github.io/</link><description>Recent content on Hello World</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 20 Dec 2021 14:59:31 +1100</lastBuildDate><atom:link href="https://harryho.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>CMMI</title><link>https://harryho.github.io/management/cmmi/</link><pubDate>Wed, 09 Mar 2011 10:59:31 +1100</pubDate><guid>https://harryho.github.io/management/cmmi/</guid><description>&lt;h2 id="cmmi"&gt;CMMI&lt;a class="anchor" href="#cmmi"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Capability Maturity Model Integration (CMMI) is a process and behavioral model that helps organizations streamline process improvement and encourage productive, efficient behaviors that decrease risks in software, product and service development.&lt;/p&gt;
&lt;h3 id="cmmi-model"&gt;CMMI model&lt;a class="anchor" href="#cmmi-model"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The CMMI starts with an appraisal process that evaluates three specific areas: process and service development, service establishment and management, and product and service acquisition. It’s designed to help improve performance by providing businesses with everything they need to consistently develop better products and services.&lt;/p&gt;</description></item><item><title>CMMI 2.0</title><link>https://harryho.github.io/management/cmmi_v2/</link><pubDate>Wed, 09 Mar 2011 10:59:31 +1100</pubDate><guid>https://harryho.github.io/management/cmmi_v2/</guid><description>&lt;h2 id="cmmi-20"&gt;CMMI 2.0&lt;a class="anchor" href="#cmmi-20"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="guilding-principles"&gt;Guilding Principles&lt;a class="anchor" href="#guilding-principles"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Focus of delivering business value&lt;/li&gt;
&lt;li&gt;Focus on business performance and results&lt;/li&gt;
&lt;li&gt;Flexible, scalable architecture&lt;/li&gt;
&lt;li&gt;Reduce redundancy&lt;/li&gt;
&lt;li&gt;Use of plain language&lt;/li&gt;
&lt;li&gt;Increased use of graphics and iconography for understanding and adoption&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="key-improvements"&gt;Key Improvements&lt;a class="anchor" href="#key-improvements"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Demonstrate the value and ROI of aclopting CMMI&lt;/p&gt;
&lt;p&gt;Performance capabilities built-in at every level of the model will help organizations to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand performance needs&lt;/li&gt;
&lt;li&gt;Track, measure and achieve&lt;/li&gt;
&lt;li&gt;Establish performance goals	those goals&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improve the overall value for CMMI appraisals and lower time, effort and cost of the appraisal process&lt;/p&gt;</description></item><item><title>COBIT 5</title><link>https://harryho.github.io/management/cobit_5/</link><pubDate>Wed, 09 Mar 2011 10:59:31 +1100</pubDate><guid>https://harryho.github.io/management/cobit_5/</guid><description>&lt;h2 id="cobit-5"&gt;COBIT 5&lt;a class="anchor" href="#cobit-5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;COBIT (Control Objectives for Information and Related Technologies) is a business framework for the governance and management of Enterprise IT, created by ISACA.&lt;/p&gt;
&lt;p&gt;The framework contains the COBIT 5 framework for governing and managing enterprise IT. It defines a set of generic processes for the management of IT, with each process defined together with process inputs and outputs, key process-activities, process objectives, performance measures and an elementary maturity model.&lt;/p&gt;</description></item><item><title>Scrum VS Kanban</title><link>https://harryho.github.io/management/scrum_vs_kanban/</link><pubDate>Wed, 09 Mar 2011 10:59:31 +1100</pubDate><guid>https://harryho.github.io/management/scrum_vs_kanban/</guid><description>&lt;h2 id="scrum-vs-kanban"&gt;Scrum VS Kanban&lt;a class="anchor" href="#scrum-vs-kanban"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kanban and scrum are frameworks that help teams adhere to agile principles and get stuff done. Both frameworks will help you build better products(and services) with fewer headaches. While the practices differ, the principles are largely the same.&lt;/p&gt;
&lt;h3 id="agile"&gt;Agile&lt;a class="anchor" href="#agile"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Agile is a structured and iterative approach to project management and product development. t recognizes the volatility of product development, and provides a methodology for self-organizing teams to respond to change without going off the rails.&lt;/p&gt;</description></item><item><title>AWS: IAM</title><link>https://harryho.github.io/cloud/aws/aws-01-iam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-01-iam/</guid><description>&lt;h2 id="iam"&gt;IAM&lt;a class="anchor" href="#iam"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS Identity and Access Management (IAM) enables you to manage access to AWS services and resources securely. Using IAM, you can create and manage AWS users and groups, and use permissions to allow and deny their access to AWS resources.&lt;/p&gt;
&lt;h3 id="root-user"&gt;Root User&lt;a class="anchor" href="#root-user"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Every account has a root user in AWS. A root user is something that&amp;rsquo;s created automatically for you whenever you create an AWS account.&lt;/li&gt;
&lt;li&gt;Every single AWS account has a root user.&lt;/li&gt;
&lt;li&gt;The trouble is that root users have unrestricted access to every service and resource that is in AWS inside of your account.&lt;/li&gt;
&lt;li&gt;The permissions of root user can&amp;rsquo;t be restricted in any way.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="dos-and-donts"&gt;Dos and Don&amp;rsquo;ts&lt;a class="anchor" href="#dos-and-donts"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You should not be accessing the root account on a regular basis, whether that&amp;rsquo;s daily, weekly, or whatever.&lt;/li&gt;
&lt;li&gt;Make sure that you turn on multi-factor authentication on the root account. Multi-factor authentication used to be called two-factor authentication. It really just means that we know the password and we have some sort of a token that we will get a number generated. It&amp;rsquo;s something that you might even use your smartphone for. But it now means that I have to know the username and password and I have to have this token that&amp;rsquo;s going to generate a code. We&amp;rsquo;ll see more about how you&amp;rsquo;ll do that later.&lt;/li&gt;
&lt;li&gt;Make sure that you&amp;rsquo;ve disabled your root access keys. This isn&amp;rsquo;t the interactive login for root, it has to do with how we can access the account programmatically.&lt;/li&gt;
&lt;li&gt;Make sure that you rotate the credentials. Just because we say don&amp;rsquo;t log in doesn&amp;rsquo;t mean set the password and then forget it.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t share the root user credentials. password. And all that the audit logs show is that root logged in and did the job. Kind of dangerous.&lt;/li&gt;
&lt;li&gt;Make sure that you create a user that has administrative privileges that&amp;rsquo;s assigned to you and that you know the password only.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="features--functions"&gt;Features &amp;amp; Functions&lt;a class="anchor" href="#features--functions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Allows user to have very secure access including through the use of multi-factor authentication and federation.&lt;/li&gt;
&lt;li&gt;Grant user a lot of granular control over the specific resources.&lt;/li&gt;
&lt;li&gt;Grant temporary access to different people.&lt;/li&gt;
&lt;li&gt;Simplify the number of logins by using federating identities&lt;/li&gt;
&lt;li&gt;Integrate the IAM solution is with all of the different products that AWS offers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mfa"&gt;MFA&lt;a class="anchor" href="#mfa"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MFA stands for multi-factor authentication&lt;/li&gt;
&lt;li&gt;Extra layer of security.&lt;/li&gt;
&lt;li&gt;Prevent against imposters, somebody who just happened to guess the right password or happened to actually shoulder surf and watch somebody key in their username and password.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="iam-user"&gt;IAM User&lt;a class="anchor" href="#iam-user"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;It is an entity that you create in AWS. The IAM user represents the person or service who uses the IAM user to interact with AWS. A primary use for IAM users is to give people the ability to sign in to the AWS Management Console for interactive tasks and to make programmatic requests to AWS services using the API or CLI. A user in AWS consists of a name, a password to sign into the AWS Management Console, and up to two access keys that can be used with the API or CLI.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Azure: CAF - 1</title><link>https://harryho.github.io/cloud/azure/az-01-caf-01/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-01-caf-01/</guid><description>&lt;h2 id="cloud-adoption-framework"&gt;Cloud Adoption Framework&lt;a class="anchor" href="#cloud-adoption-framework"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Microsoft Cloud Adoption Framework for Azure is proven guidance that&amp;rsquo;s designed to help you create and implement the business and technology strategies necessary for your organization to succeed in the cloud. It provides best practices, documentation, and tools that cloud architects, IT professionals, and business decision makers need to successfully achieve short-term and long-term objectives.&lt;/p&gt;
&lt;p&gt;The Cloud Adoption Framework brings together cloud adoption best practices from Microsoft employees, partners, and customers. It provides a set of tools, guidance, and narratives that help shape technology, business, and people strategies for driving desired business outcomes during your cloud adoption effort. Review the guidance for each methodology below, providing you with easy access to the right guidance at the right time.&lt;/p&gt;</description></item><item><title>Azure: CAF - 2</title><link>https://harryho.github.io/cloud/azure/az-01-caf-02/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-01-caf-02/</guid><description>&lt;h2 id="function"&gt;Function&lt;a class="anchor" href="#function"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cloud adoption functions deliver technical solutions.&lt;/li&gt;
&lt;li&gt;Cloud strategy functions align technical change with business needs.&lt;/li&gt;
&lt;li&gt;Cloud operations functions support and operate adopted solutions.&lt;/li&gt;
&lt;li&gt;Cloud center of excellence (CCoE) functions improve quality, speed, and resiliency of adoption.&lt;/li&gt;
&lt;li&gt;Cloud governance functions manage risk.&lt;/li&gt;
&lt;li&gt;Cloud platform functions operate and mature the platform.&lt;/li&gt;
&lt;li&gt;Cloud automation functions accelerate adoption and innovation.&lt;/li&gt;
&lt;li&gt;Cloud security functions manage security risks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="team"&gt;Team&lt;a class="anchor" href="#team"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="cloud-strategy-team"&gt;cloud strategy team&lt;a class="anchor" href="#cloud-strategy-team"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To be successful, every cloud adoption journey needs to involve some level of strategic planning. This getting started guide is designed to help you establish a dedicated team or virtual team that can build and deliver on a solid cloud strategy.&lt;/p&gt;</description></item><item><title>Azure: CAF - 3</title><link>https://harryho.github.io/cloud/azure/az-01-caf-03/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-01-caf-03/</guid><description>&lt;h2 id="cloud-adoption-strategy"&gt;cloud adoption strategy&lt;a class="anchor" href="#cloud-adoption-strategy"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Define and document your motivations: Meet with key stakeholders and executives to document the motivations behind cloud adoption.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Document business outcomes: Engage motivated stakeholders and executives to document specific business outcomes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Develop a business case: Develop a business case to validate the financial model that supports your motivations and outcomes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the right first project: Your first cloud adoption project will help align motivations with technical effort. This article can help you choose your first project wisely.&lt;/p&gt;</description></item><item><title>Azure: RBAC - 1</title><link>https://harryho.github.io/cloud/azure/az-02-rbac-01/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-02-rbac-01/</guid><description>&lt;h2 id="rbac"&gt;RBAC&lt;a class="anchor" href="#rbac"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Azure RBAC is an authorization system built on Azure Resource Manager that provides fine-grained access management of Azure resources.&lt;/p&gt;
&lt;h3 id="what-to-do-with-rbac"&gt;What to do with RBAC&lt;a class="anchor" href="#what-to-do-with-rbac"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Allow one user to manage virtual machines in a subscription and another user to manage virtual networks&lt;/li&gt;
&lt;li&gt;Allow a DBA group to manage SQL databases in a subscription&lt;/li&gt;
&lt;li&gt;Allow a user to manage all resources in a resource group, such as virtual machines, websites, and subnets&lt;/li&gt;
&lt;li&gt;Allow an application to access all resources in a resource group&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-it-works"&gt;How it works&lt;a class="anchor" href="#how-it-works"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The way you control access to resources using Azure RBAC is to create role assignments. This is a key concept to understand – it&amp;rsquo;s how permissions are enforced. A role assignment consists of three elements: security principal, role definition, and scope.&lt;/p&gt;</description></item><item><title>Azure: RBAC - 2</title><link>https://harryho.github.io/cloud/azure/az-02-rbac-02/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-02-rbac-02/</guid><description>&lt;h2 id="roles"&gt;Roles&lt;a class="anchor" href="#roles"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Classic subscription administrator roles&lt;/li&gt;
&lt;li&gt;Azure roles&lt;/li&gt;
&lt;li&gt;Azure Active Directory (Azure AD) roles&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="history"&gt;History&lt;a class="anchor" href="#history"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;When Azure was initially released, access to resources was managed with just three administrator roles: Account Administrator, Service Administrator, and Co-Administrator. Later, Azure role-based access control (Azure RBAC) was added. Azure RBAC is a newer authorization system that provides fine-grained access management to Azure resources. Azure RBAC includes many built-in roles, can be assigned at different scopes, and allows you to create your own custom roles. To manage resources in Azure AD, such as users, groups, and domains, there are several Azure AD roles. To manage resources in Azure AD, such as users, groups, and domains, there are several Azure AD roles.&lt;/p&gt;</description></item><item><title>Azure: RBAC - 3</title><link>https://harryho.github.io/cloud/azure/az-02-rbac-03/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-02-rbac-03/</guid><description>&lt;h2 id="best-practices"&gt;Best practices&lt;a class="anchor" href="#best-practices"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="only-grant-the-access-users-need"&gt;Only grant the access users need&lt;a class="anchor" href="#only-grant-the-access-users-need"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Scope&lt;/th&gt;
					&lt;th&gt;Roles&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;| Reader | Resource-specific | Custom | Contributor | Owner|
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Management Group | Observers | Users managing resources| Users managing resources| Users managing resources | Admins
Subscriptions | Observers | Users managing resources | Users managing resources | Users managing resources| Admins
Resource Group | Observers | Users managing resources | Users managing resources | Users managing resources | Admins
Resources | Automated processes | Automated processes | Automated processes | Automated processes | Automated processes |&lt;/p&gt;</description></item><item><title>Data Types &amp; Ownership</title><link>https://harryho.github.io/coding/rustlang/rust-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/rustlang/rust-note-1/</guid><description>&lt;h3 id="mutability"&gt;Mutability&lt;a class="anchor" href="#mutability"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Rust encourages you to favor immutability. It’s important that we get compile-time errors when we attempt to change a value that we previously designated as immutable because this very situation can lead to bugs.&lt;/p&gt;
&lt;p&gt;But mutability can be very useful. To make them mutable is simply adding mut in front of the variable name. In addition to allowing this value to change, mut conveys intent to future readers of the code by indicating that other parts of the code will be changing this variable value.&lt;/p&gt;</description></item><item><title>DigitialOcean: Droplet</title><link>https://harryho.github.io/cloud/digito/digito-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/digito/digito-note-1/</guid><description>&lt;h2 id="droplet"&gt;Droplet&lt;a class="anchor" href="#droplet"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DigitalOcean Droplets are Linux-based virtual machines (VMs) that run on top of virtualized hardware. Each Droplet you create is a new server you can use, either standalone or as part of a larger, cloud-based infrastructure.&lt;/p&gt;
&lt;h3 id="prerequisite"&gt;Prerequisite&lt;a class="anchor" href="#prerequisite"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Prepare a bank account or credit card&lt;/li&gt;
&lt;li&gt;Signup DigitalOcean account and activate it&lt;/li&gt;
&lt;li&gt;Create a new prject&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="os-options"&gt;OS Options&lt;a class="anchor" href="#os-options"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;FreeBSD&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;Debian&lt;/li&gt;
&lt;li&gt;CentOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="plans-and-pricing"&gt;Plans and Pricing&lt;a class="anchor" href="#plans-and-pricing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We offer four different kinds of Droplet plans: one shared CPU plan and three dedicated CPU plans.&lt;/p&gt;</description></item><item><title>F# Overview</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-1/</guid><description>&lt;h2 id="f"&gt;F&lt;code&gt;#&lt;/code&gt;&lt;a class="anchor" href="#f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;F# is an open-source, cross-platform, interoperable programming language for writing succinct, robust and performant code. Your focus remains on your problem domain, rather than the details of programming.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="organizing-f-code"&gt;Organizing F# Code&lt;a class="anchor" href="#organizing-f-code"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The following table shows reference articles related to organizing your F# code.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Title&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Namespaces&lt;/td&gt;
					&lt;td&gt;Learn about namespace support in F#. A namespace lets you organize code into areas of related functionality by enabling you to attach a name to a grouping of program elements.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Modules&lt;/td&gt;
					&lt;td&gt;Learn about modules. An F# module is like a namespace and can also include values and functions. Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;open Declarations&lt;/td&gt;
					&lt;td&gt;Learn about how open works. An open declaration specifies a module, namespace, or type whose elements you can reference without using a fully qualified name.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Signatures&lt;/td&gt;
					&lt;td&gt;Learn about signatures and signature files. A signature file contains information about the public signatures of a set of F# program elements, such as types, namespaces, and modules. It can be used to specify the accessibility of these program elements.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Access Control&lt;/td&gt;
					&lt;td&gt;Learn about access control in F#. Access control means declaring what clients are able to use certain program elements, such as types, methods, functions, and so on.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;XML Documentation&lt;/td&gt;
					&lt;td&gt;Learn about support for generating documentation files for XML doc comments, also known as triple slash comments. You can produce documentation from code comments in F# as in other .NET languages.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="literals-and-strings"&gt;Literals and Strings&lt;a class="anchor" href="#literals-and-strings"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The following table shows reference articles that describe literals and strings in F#.&lt;/p&gt;</description></item><item><title>Getting started</title><link>https://harryho.github.io/coding/golang/go-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-1/</guid><description>&lt;h2 id="go-introduction"&gt;Go Introduction&lt;a class="anchor" href="#go-introduction"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Golang&amp;rsquo;s popularity is skyrocketing. The thriving of Docker and Kubernetes push the Golang to a higher level.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Go is easy to become functional with and appropriate for junior developers to work on. Also, having a language that encourages readability and comprehension is extremely useful. The mixture of duck typing (via interfaces) and convenience features such as &amp;ldquo;:=&amp;rdquo; for short variable declarations give Go the feel of a dynamically typed language while retaining the positives of a strongly typed one.&lt;/p&gt;</description></item><item><title>Package &amp; Module</title><link>https://harryho.github.io/coding/python/python-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-1/</guid><description>&lt;h2 id="package--module"&gt;Package &amp;amp; Module&lt;a class="anchor" href="#package--module"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;Packages are modules that contain other modules.&lt;/li&gt;
&lt;li&gt;Packages are generally implemented as directories containing a special &lt;code&gt;__init__.py&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;__init__.py&lt;/code&gt; file is executed when the package is imported.&lt;/li&gt;
&lt;li&gt;Packages can contain sub packages which themselves are implemented with &lt;code&gt;__init__.py&lt;/code&gt; files in directories.&lt;/li&gt;
&lt;li&gt;The module objects for packages have a &lt;code&gt;__path__&lt;/code&gt; attribute.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="syspath"&gt;sys.path&lt;a class="anchor" href="#syspath"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;List of directories which Python searches for modules.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# list directories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;sys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;sys&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;path&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;append&lt;/code&gt; to attach the package directory to sys.path&lt;/p&gt;</description></item><item><title>AWS : CLI - 1</title><link>https://harryho.github.io/cloud/aws/aws-02-cli-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-02-cli-1/</guid><description>&lt;h3 id="aws-cli"&gt;AWS CLI&lt;a class="anchor" href="#aws-cli"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Amazon Virtual Private Cloud (Amazon VPC) enables you to launch AWS resources into a virtual network that you&amp;rsquo;ve defined. This virtual network closely resembles a traditional network that you&amp;rsquo;d operate in your own data center, with the benefits of using the scalable infrastructure of AWS.&lt;/p&gt;
&lt;h3 id="cli-installation-version-1"&gt;CLI installation (Version 1)&lt;a class="anchor" href="#cli-installation-version-1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="install-python-3"&gt;Install Python 3&lt;a class="anchor" href="#install-python-3"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Python 2.7 is no longer supported. Please install python3&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; sudo yum install python3
 pip3 --version
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="profile-setup"&gt;Profile Setup&lt;a class="anchor" href="#profile-setup"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A named profile is a collection of settings and credentials that you can apply to a AWS CLI command. When you specify a profile to run a command, the settings and credentials are used to run that command.&lt;/p&gt;</description></item><item><title>AWS : CLI - 2</title><link>https://harryho.github.io/cloud/aws/aws-02-cli-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-02-cli-2/</guid><description>&lt;h3 id="aws-cli--vpc"&gt;AWS CLI &amp;amp; VPC&lt;a class="anchor" href="#aws-cli--vpc"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Following is a sample to create a VPC with 2 private subnets, 2 public subnets across 2 avaliable zones and NAT Gateway.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#******************************************************************************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# AWS VPC CLI Script&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#******************************************************************************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# SYNOPSIS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Automates the creation of a custom IPv4 VPC, having both a public and a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# private subnet, and a NAT gateway.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#==============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# NOTES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# VERSION: 1.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# AUTHOR: Harry Ho&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#==============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# MODIFY THE SETTINGS BELOW&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#==============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;AWS_REGION&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;ap-southeast-2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;VPC_NAME&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;DEV-PG-II&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;VPC_CIDR&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;10.5.0.0/16&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PUBLIC_CIDR&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;10.5.1.0/24&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PUBLIC_AZ&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;ap-southeast-2a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PUBLIC_NAME&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;-PubSub-AZ2a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PRIVATE_CIDR&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;10.5.2.0/24&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PRIVATE_AZ&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;ap-southeast-2b&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PRIVATE_NAME&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;-PrvSub-AZ2b&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;IGW_NAME&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;-IGW&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;NAT_GW_NAME&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;-NAT-GW&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;CHECK_FREQUENCY&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#==============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# DO NOT MODIFY CODE BELOW&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#==============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create VPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating VPC in preferred region...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;VPC_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-vpc &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cidr-block &lt;span style="color:#953800"&gt;$VPC_CIDR&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;Vpc.{VpcId:VpcId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; VPC ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; CREATED in &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; region.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add Name tag to VPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 create-tags &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --resources &lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --tags &lt;span style="color:#0a3069"&gt;&amp;#34;Key=Name,Value=&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; VPC ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; NAMED as &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create Public Subnet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating Public Subnet...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PUBLIC_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-subnet &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --vpc-id &lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cidr-block &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_CIDR&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --availability-zone &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_AZ&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;Subnet.{SubnetId:SubnetId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Subnet ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; CREATED in &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_AZ&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Availability Zone.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add Name tag to Public Subnet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 create-tags &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --resources &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --tags &lt;span style="color:#0a3069"&gt;&amp;#34;Key=Name,Value=&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Subnet ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; NAMED as&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create Private Subnet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating Private Subnet...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;SUBNET_PRIVATE_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-subnet &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --vpc-id &lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cidr-block &lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_CIDR&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --availability-zone &lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_AZ&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;Subnet.{SubnetId:SubnetId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Subnet ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; CREATED in &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_AZ&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Availability Zone.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add Name tag to Private Subnet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 create-tags &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --resources &lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --tags &lt;span style="color:#0a3069"&gt;&amp;#34;Key=Name,Value=&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Subnet ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; NAMED as &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PRIVATE_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create Internet gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating Internet Gateway...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;IGW_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-internet-gateway &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;InternetGateway.{InternetGatewayId:InternetGatewayId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Internet Gateway ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; CREATED.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add Name tag to Internet gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 create-tags &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --resources &lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --tags &lt;span style="color:#0a3069"&gt;&amp;#34;Key=Name,Value=&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Internet gateway &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; NAMED as &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Attach Internet gateway to your VPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 attach-internet-gateway &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --vpc-id &lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --internet-gateway-id &lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Internet Gateway ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; ATTACHED to VPC ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create Route Table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating Route Table...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-route-table &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --vpc-id &lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;RouteTable.{RouteTableId:RouteTableId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Route Table ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; CREATED.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create route to Internet Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;RESULT&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-route &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --route-table-id &lt;span style="color:#953800"&gt;$ROUTE_TABLE_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --destination-cidr-block 0.0.0.0/0 &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --gateway-id &lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Route to &amp;#39;0.0.0.0/0&amp;#39; via Internet Gateway ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$IGW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; ADDED to&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Route Table ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Associate Public Subnet with Route Table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;RESULT&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 associate-route-table &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --subnet-id &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --route-table-id &lt;span style="color:#953800"&gt;$ROUTE_TABLE_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Public Subnet ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; ASSOCIATED with Route Table ID&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Enable Auto-assign Public IP on Public Subnet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 modify-subnet-attribute &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --subnet-id &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --map-public-ip-on-launch &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; &amp;#39;Auto-assign Public IP&amp;#39; ENABLED on Public Subnet ID&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Allocate Elastic IP Address for NAT Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Creating NAT Gateway...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;EIP_ALLOC_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 allocate-address &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --domain vpc &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;{AllocationId:AllocationId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Elastic IP address ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$EIP_ALLOC_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; ALLOCATED.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create NAT Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;NAT_GW_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-nat-gateway &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --subnet-id &lt;span style="color:#953800"&gt;$SUBNET_PUBLIC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --allocation-id &lt;span style="color:#953800"&gt;$EIP_ALLOC_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;NatGateway.{NatGatewayId:NatGatewayId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Creating NAT Gateway ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; and waiting for it to &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;become available.\n Please BE PATIENT as this can take some &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;time to complete.\n ......\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;printf&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; &lt;/span&gt;&lt;span style="color:#953800"&gt;$FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;STATUS: AVAILABLE - Total of %02d seconds elapsed for process&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;\n ......\n NAT Gateway ID &amp;#39;%s&amp;#39; is now AVAILABLE.\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;start_time&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date -u +%s&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 &lt;span style="color:#6639ba"&gt;wait&lt;/span&gt; nat-gateway-available &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --nat-gateway-ids &lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;end_time&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date -u +%s&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;elapsed&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$((&lt;/span&gt;&lt;span style="color:#953800"&gt;$end_time&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#953800"&gt;$start_time&lt;/span&gt;&lt;span style="color:#cf222e"&gt;))&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;printf&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; &lt;/span&gt;&lt;span style="color:#953800"&gt;$FORMATTED_MSG&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#953800"&gt;$elapsed&lt;/span&gt; &lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add Name tag to NAT Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aws ec2 create-tags &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --resources &lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --tags &lt;span style="color:#0a3069"&gt;&amp;#34;Key=Name,Value=&lt;/span&gt;&lt;span style="color:#953800"&gt;$NAT_GW_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Internet gateway &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; NAMED as &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$NAT_GW_NAME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create route to NAT Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;MAIN_ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 describe-route-tables &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --filters &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;vpc-id,Values&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;$VPC_ID&lt;/span&gt; &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;association.main,Values&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;true&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --query &lt;span style="color:#0a3069"&gt;&amp;#39;RouteTables[*].{RouteTableId:RouteTableId}&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output text &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Main Route Table ID is &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$MAIN_ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;RESULT&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;aws ec2 create-route &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --route-table-id &lt;span style="color:#953800"&gt;$MAIN_ROUTE_TABLE_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --destination-cidr-block 0.0.0.0/0 &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --gateway-id &lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --region &lt;span style="color:#953800"&gt;$AWS_REGION&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34; Route to &amp;#39;0.0.0.0/0&amp;#39; via NAT Gateway with ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$NAT_GW_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; ADDED to&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Route Table ID &amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;$MAIN_ROUTE_TABLE_ID&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;COMPLETED&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AWS : CLI - 3</title><link>https://harryho.github.io/cloud/aws/aws-02-cli-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-02-cli-3/</guid><description>&lt;h3 id="aws-cli---security-group"&gt;AWS CLI &amp;amp; &amp;amp; Security Group&lt;a class="anchor" href="#aws-cli---security-group"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Sometimes it is so annoying to update the rules of security group one by one, because of the change of your public IP address. Following is a script to make such change easier.&lt;/p&gt;
&lt;p&gt;The script will only update the SSH / RDP protocals of specified the security groups. The SSH and RDP are most popular ones which allow admin to access the remote EC2.&lt;/p&gt;</description></item><item><title>Closure &amp; Decorator</title><link>https://harryho.github.io/coding/python/python-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-2/</guid><description>&lt;h2 id="closure--decorator"&gt;Closure &amp;amp; Decorator&lt;a class="anchor" href="#closure--decorator"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="legb-rules"&gt;LEGB rules&lt;a class="anchor" href="#legb-rules"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Local, Enclosing, Gloable, Built-in&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="local-function"&gt;Local function&lt;a class="anchor" href="#local-function"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Useful for specialized, one-off functions&lt;/li&gt;
&lt;li&gt;Aid in code organization and readability&lt;/li&gt;
&lt;li&gt;Similar to lambdas, but more general&lt;/li&gt;
&lt;li&gt;May contain multiple expressions&lt;/li&gt;
&lt;li&gt;May contain statements&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="closure"&gt;Closure&lt;a class="anchor" href="#closure"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Closure maintain references to objects from earlier scopes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LEGB does not apply when making new bindings&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Usage of nonlocal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Example&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;make_timer&lt;/span&gt;&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; last_called &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;elapsed&lt;/span&gt;&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;nonlocal&lt;/span&gt; last_called
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; now &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; time&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;time&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; last_called &lt;span style="color:#0550ae"&gt;is&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; last_called &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; now
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; now &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; last_called
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; last_called &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; now
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; result
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#953800"&gt;__name__&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mt &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; make_timer&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mt &lt;span style="color:#1f2328"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;-----------------------------&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mt &lt;span style="color:#1f2328"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;-----------------------------&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mt &lt;span style="color:#1f2328"&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use as function factory&lt;/p&gt;</description></item><item><title>DigitialOcean: Get Started</title><link>https://harryho.github.io/cloud/digito/digito-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/digito/digito-note-2/</guid><description>&lt;h2 id="user-setup"&gt;User Setup&lt;a class="anchor" href="#user-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="create-a-new-admin-user"&gt;Create a new admin user&lt;a class="anchor" href="#create-a-new-admin-user"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="add-a-new-user"&gt;Add a new user&lt;a class="anchor" href="#add-a-new-user"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Add new user 
# set password
adduser &amp;lt;admin_user&amp;gt;

# user to sudo group
usermod -aG sudo &amp;lt;admin_user&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="set-ssh-access-for-new-user"&gt;Set SSH access for new user&lt;a class="anchor" href="#set-ssh-access-for-new-user"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Switch session to new user 
su - &amp;lt;admin_user&amp;gt;

# navigate to user home 
cd

# Prepare ssh directory
mkdir .ssh
chmod 700 ~/.ssh

# Copy root key
sudo cp /root/.ssh/authorized_keys ~/.ssh/authorized_keys
chmod 644 /home/&amp;lt;admin_user&amp;gt;/.ssh/authorized_keys
sudo chown -R &amp;lt;admin_user&amp;gt;:&amp;lt;admin_user&amp;gt; ~/&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="login-as-new-user-via-ssh"&gt;Login as new user via SSH&lt;a class="anchor" href="#login-as-new-user-via-ssh"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ssh -i ~/.ssh/&amp;lt;your_droplet_rsa&amp;gt; &amp;lt;admin_user&amp;gt;@&amp;lt;your_droplet_ip&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="set-root-password--disable-ssh"&gt;Set root password &amp;amp; disable SSH&lt;a class="anchor" href="#set-root-password--disable-ssh"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo passwd

# rename key file
sudo mv /root/.ssh/authorized_keys /root/.ssh/disabled_authorized_keys&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="security-update"&gt;Security Update&lt;a class="anchor" href="#security-update"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Update only for security
sudo apt-get install unattended-upgrades

# Update security packages
sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d

# Update quietly
sudo unattended-upgrade&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="tagging--cloud-firewall"&gt;Tagging &amp;amp; Cloud Firewall&lt;a class="anchor" href="#tagging--cloud-firewall"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tags are custom labels you apply to Droplets that have multiple uses
&lt;ul&gt;
&lt;li&gt;Add tags to your droplet. e.g. my-web-server&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DigitalOcean Cloud Firewalls are a free, network-based, stateful firewall service for your DigitalOcean Droplets. They block all traffic that isn’t expressly permitted by a rule. You can define the Droplets protected by a firewall individually or by using tags.&lt;/li&gt;
&lt;li&gt;Always setup Firewall for your droplets
&lt;ul&gt;
&lt;li&gt;Set SSH permission for only given IP address&lt;/li&gt;
&lt;li&gt;Set HTTP for port 80&lt;/li&gt;
&lt;li&gt;Set HTTPS for port 443&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other-features"&gt;Other Features&lt;a class="anchor" href="#other-features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="floating-ips"&gt;Floating IPs&lt;a class="anchor" href="#floating-ips"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;DigitalOcean Floating IPs are publicly-accessible static IP addresses that you can assign to Droplets. A floating IP provides an additional static address you can use to access a Droplet without replacing or changing the Droplet’s original public IP address.&lt;/p&gt;</description></item><item><title>Map, Function &amp; Closure</title><link>https://harryho.github.io/coding/golang/go-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-2/</guid><description>&lt;h3 id="map"&gt;Map&lt;a class="anchor" href="#map"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Maps are a special kind of data structure: an unordered collection of pairs of items, where one element of the pair is the key, and the other element, associated with the key, is the data or the value, hence they are also called associative arrays or dictionaries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The key type can be any type for which the operations == and != are defined, like string, int, float. The value type can be any type.&lt;/p&gt;</description></item><item><title>Project, Vector, String &amp; Hashmap</title><link>https://harryho.github.io/coding/rustlang/rust-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/rustlang/rust-note-2/</guid><description>&lt;h3 id="project-management"&gt;Project management&lt;a class="anchor" href="#project-management"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Rust has a number of features that allow you to manage your code’s organization, including which details are exposed, which details are private, and what names are in each scope in your programs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Packages: A Cargo feature that lets you build, test, and share crates&lt;/li&gt;
&lt;li&gt;Crates: A tree of modules that produces a library or executable&lt;/li&gt;
&lt;li&gt;Modules and use: Let you control the organization, scope, and privacy of paths&lt;/li&gt;
&lt;li&gt;Paths: A way of naming an item, such as a struct, function, or module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="package--crate"&gt;Package &amp;amp; Crate&lt;a class="anchor" href="#package--crate"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A package is one or more crates that provide a set of functionality. A package contains a Cargo.toml file that describes how to build those crates.&lt;/p&gt;</description></item><item><title>AWS: VPC - 1</title><link>https://harryho.github.io/cloud/aws/aws-03-vpc-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-03-vpc-1/</guid><description>&lt;h2 id="vpc-part-1"&gt;VPC Part 1&lt;a class="anchor" href="#vpc-part-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Virtual Private Cloud (Amazon VPC) enables you to launch AWS resources into a virtual network that you&amp;rsquo;ve defined. This virtual network closely resembles a traditional network that you&amp;rsquo;d operate in your own data center, with the benefits of using the scalable infrastructure of AWS.&lt;/p&gt;
&lt;h3 id="key-concepts"&gt;Key concepts&lt;a class="anchor" href="#key-concepts"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A virtual private cloud (VPC) is a virtual network dedicated to your AWS account.&lt;/li&gt;
&lt;li&gt;A subnet is a range of IP addresses in your VPC.&lt;/li&gt;
&lt;li&gt;A route table contains a set of rules, called routes, that are used to determine where network traffic is directed.&lt;/li&gt;
&lt;li&gt;An internet gateway is a horizontally scaled, redundant, and highly available VPC component that allows communication between instances in your VPC and the internet. It therefore imposes no availability risks or bandwidth constraints on your network traffic.&lt;/li&gt;
&lt;li&gt;A VPC endpoint enables you to privately connect your VPC to supported AWS services and VPC endpoint services powered by PrivateLink without requiring an internet gateway, NAT device, VPN connection, or AWS Direct Connect connection. Instances in your VPC do not require public IP addresses to communicate with resources in the service. Traffic between your VPC and the other service does not leave the Amazon network.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ip-addressing"&gt;IP addressing&lt;a class="anchor" href="#ip-addressing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Once the VPC is created, its CIDR block range can NOT be chagned.&lt;/li&gt;
&lt;li&gt;To change CIDR size, you need to create a new VPC&lt;/li&gt;
&lt;li&gt;The different subnets within a VPC can NOT be overlap.&lt;/li&gt;
&lt;li&gt;Can expand VPC by adding secondary IPv4 CIDR blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="default-vpc"&gt;Default VPC&lt;a class="anchor" href="#default-vpc"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AWS creates a default VPC for you in each region. The default VPC will include 1 CIDR block, 1 route table, 1 DHCP options set, 1 Network ACL, 1 Security Group, 1 Internet Gateway, and 3~6 Subnets. The number of subnet depends on the number of Available Zone in the region.&lt;/p&gt;</description></item><item><title>Azure: App - 1</title><link>https://harryho.github.io/cloud/azure/az-03-app-01/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-03-app-01/</guid><description>&lt;h2 id="azure-app-service"&gt;Azure App Service&lt;a class="anchor" href="#azure-app-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Azure App Service is an HTTP-based service for hosting web applications, REST APIs, and mobile back ends. You can develop in your favorite language, be it .NET, .NET Core, Java, Ruby, Node.js, PHP, or Python. Applications run and scale with ease on both Windows and Linux-based environments.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Built-in auto scale support&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Continuous integration/deployment support&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deployment slots&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="limitations"&gt;Limitations&lt;a class="anchor" href="#limitations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;App Service on Linux is not supported on Shared pricing tier.&lt;/li&gt;
&lt;li&gt;You can&amp;rsquo;t mix Windows and Linux apps in the same App Service plan.&lt;/li&gt;
&lt;li&gt;The Azure portal shows only features that currently work for Linux apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="create-a-web-app"&gt;Create a Web App&lt;a class="anchor" href="#create-a-web-app"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="create-a-web-app-via-docker-container"&gt;Create a web app via docker container&lt;a class="anchor" href="#create-a-web-app-via-docker-container"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Set defaout subscriptoin&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az account set --subscription XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Crate a resource group&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az group create --name my-ResourceGroup --location &amp;lt;your-region&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Create a service plan&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;By default, the command below uses an inexpensive B1 pricing tier that is free for the first month. You can control the tier with the &amp;ndash;sku parameter.&lt;/p&gt;</description></item><item><title>DigitialOcean: First Web Host</title><link>https://harryho.github.io/cloud/digito/digito-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/digito/digito-note-3/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Here I contineu to setup SSL certificates for all sites on my web host&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="ufw"&gt;UFW&lt;a class="anchor" href="#ufw"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;UFW, or Uncomplicated Firewall, is a front-end to iptables. Its main goal is to make managing your firewall drop-dead simple and to provide an easy-to-use interface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT Enable UFW&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;DO NOT enable UFW without reading through the instructions&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="enable-ip-v6"&gt;Enable IP V6&lt;a class="anchor" href="#enable-ip-v6"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open the UFW configuration with vi:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo vi /etc/default/ufw&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Make sure &amp;ldquo;IPV6&amp;rdquo; is set to &amp;ldquo;yes&amp;rdquo;, like so:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;...
IPV6=yes
...&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="set-default-rules"&gt;Set default rules&lt;a class="anchor" href="#set-default-rules"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ufw deny incoming
sudo ufw allow outgoing&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="allow-ssh--openssh"&gt;Allow SSH / OpenSSH&lt;a class="anchor" href="#allow-ssh--openssh"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Check app list &amp;amp; enable OpenSSH&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# List applications
sudo ufw app list

# Allow SSH
sudo ufw allow OpenSSH&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Directly allow port 22 or other SSH port, e.g. 2222&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ufw allow 22 &lt;/code&gt;&lt;/pre&gt;&lt;h3 id="enable-ufw"&gt;Enable UFW&lt;a class="anchor" href="#enable-ufw"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ufw enable
sudo ufw sattus verbose&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="nginx"&gt;Nginx&lt;a class="anchor" href="#nginx"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="install-nginx"&gt;Install Nginx&lt;a class="anchor" href="#install-nginx"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install ngix&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="set-ufw"&gt;Set UFW&lt;a class="anchor" href="#set-ufw"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# show applications 
sudo ufw app list

# Allow Nginx 
sudo ufw allow &amp;#39;Nginx Full&amp;#39;
sudo ufw reload&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="build-web-host-block"&gt;Build Web Host Block&lt;a class="anchor" href="#build-web-host-block"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="create-the-directory-structure"&gt;Create the Directory Structure&lt;a class="anchor" href="#create-the-directory-structure"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The document root is the directory where the website files for a domain name are stored and served in response to requests. You can set the document root to any location you want.&lt;/p&gt;</description></item><item><title>Error handling</title><link>https://harryho.github.io/coding/rustlang/rust-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/rustlang/rust-note-3/</guid><description>&lt;h3 id="error"&gt;Error&lt;a class="anchor" href="#error"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Rust groups errors into two major categories: recoverable and unrecoverable errors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rust doesn’t have exceptions. Instead, it has the type Result&amp;lt;T, E&amp;gt; for recoverable errors and the panic! macro that stops execution when the program encounters an unrecoverable error.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="panic---unrecoverable-errors"&gt;panic! - Unrecoverable Errors&lt;a class="anchor" href="#panic---unrecoverable-errors"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Rust has the panic! macro. When the panic! macro executes, your program will print a failure message, unwind and clean up the stack, and then quit. This most commonly occurs when a bug of some kind has been detected and it’s not clear to the programmer how to handle the error.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="unwinding-the-stack-or-aborting-in-response"&gt;Unwinding the Stack or Aborting in Response&lt;a class="anchor" href="#unwinding-the-stack-or-aborting-in-response"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;By default, when a panic occurs, the program starts unwinding, which means Rust walks back up the stack and cleans up the data from each function it encounters. But this walking back and cleanup is a lot of work. The alternative is to immediately abort, which ends the program without cleaning up. Memory that the program was using will then need to be cleaned up by the operating system.&lt;/p&gt;</description></item><item><title>F# Functions</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-3/</guid><description>&lt;h2 id="f-function"&gt;F# Function&lt;a class="anchor" href="#f-function"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Functions are the fundamental unit of program execution in any programming language. As in other languages, an F# function has a name, can have parameters and take arguments, and has a body. F# also supports functional programming constructs such as treating functions as values, using unnamed functions in expressions, composition of functions to form new functions, curried functions, and the implicit definition of functions by way of the partial application of function arguments.&lt;/p&gt;</description></item><item><title>String &amp; Representation</title><link>https://harryho.github.io/coding/python/python-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-3/</guid><description>&lt;h2 id="string--representation"&gt;String &amp;amp; Representation&lt;a class="anchor" href="#string--representation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="str"&gt;str()&lt;a class="anchor" href="#str"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;print()&lt;/code&gt; -&amp;gt; &lt;code&gt;str()&lt;/code&gt; -&amp;gt; &lt;code&gt;__str(self)__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fallback to &lt;code&gt;repr()&lt;/code&gt;. By default, &lt;code&gt;str()&lt;/code&gt; simply calls &lt;code&gt;repr()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Produces a readable, human-friendly representation of an object&lt;/li&gt;
&lt;li&gt;It is also the string constructor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="repr"&gt;repr()&lt;a class="anchor" href="#repr"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Exactness is more important than human-friendliness&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Suited for debugging. Unambiguous, precise, include type&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Includes identifying information.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generally best for logging and developers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The default repr() is not very helpful&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a rule, you should always write a repr() for your classes&lt;/p&gt;</description></item><item><title>Struct &amp; Interface</title><link>https://harryho.github.io/coding/golang/go-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-3/</guid><description>&lt;h3 id="struct"&gt;Struct&lt;a class="anchor" href="#struct"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Go supports user-defined or custom types in the form of alias types or structs. A struct tries to represent a real-world entity with its properties. Structs are composite types, to use when you want to define a type which consist of a number of properties, each having their own type and value, grouping pieces of data together.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="struct-with-tags"&gt;Struct with tags&lt;a class="anchor" href="#struct-with-tags"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A field in a struct can, apart from a name and a type, also optionally have a tag: this is a string attached to the field, which could be documentation or some other important label. The tag-content cannot be used in normal programming, only the package reflect can access it.&lt;/p&gt;</description></item><item><title>AWS: VPC - 2</title><link>https://harryho.github.io/cloud/aws/aws-03-vpc-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-03-vpc-2/</guid><description>&lt;h2 id="vpc-part-2"&gt;VPC Part 2&lt;a class="anchor" href="#vpc-part-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;VPC has an implicit router (implied router), and you use route tables to control where network traffic is directed.&lt;/p&gt;
&lt;h3 id="route-table"&gt;Route table&lt;a class="anchor" href="#route-table"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Have up to 200 route tables per VPC&lt;/li&gt;
&lt;li&gt;Have up to 50 route entries per route table&lt;/li&gt;
&lt;li&gt;Each subnet must be associated with only one route table&lt;/li&gt;
&lt;li&gt;The subent (when created) will be associated with main (default) VPC route table&lt;/li&gt;
&lt;li&gt;Can change the subnet association to another route table&lt;/li&gt;
&lt;li&gt;Can NOT delete the main route table&lt;/li&gt;
&lt;li&gt;Every route table in a VPC comes with a default rule that allows all VPC subnets to comminunicate with one another. This rule can NOT be modified or deleted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="security-group"&gt;Security Group&lt;a class="anchor" href="#security-group"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;It is a virtual firewall&lt;/li&gt;
&lt;li&gt;It controls traffic at the EC2ss level&lt;/li&gt;
&lt;li&gt;Up to 5 security groups per EC2&lt;/li&gt;
&lt;li&gt;Stateful, return traffic, of allowed inbound traffic, is allowed, even if there are no rules to allow it.&lt;/li&gt;
&lt;li&gt;Can only have permit rules, can NOT have deny rules&lt;/li&gt;
&lt;li&gt;Implicit deny rule at the end&lt;/li&gt;
&lt;li&gt;Security group is associated wth EC2&amp;rsquo;s network interface&lt;/li&gt;
&lt;li&gt;Any change on security group takes effect immediately&lt;/li&gt;
&lt;li&gt;Default security groupd can not be deleted&lt;/li&gt;
&lt;li&gt;It is VPC resource, hence, different EC2 in differenet AZs within the same VPC, can have the same security group applied to them.&lt;/li&gt;
&lt;li&gt;It can NOT block a certain range of IP addresses from Internet from gettting to EC2 fleets&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="default-vs-customized-group"&gt;Default vs Customized Group&lt;a class="anchor" href="#default-vs-customized-group"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The default security group has inbound and outbound rules when created. The inboud rule allows all traffics in from the same security group. The outbound rule allows all traffics to any destination. The customized security group has outbound rule only by default.&lt;/p&gt;</description></item><item><title>Azure: CLI - 1</title><link>https://harryho.github.io/cloud/azure/az-04-cli-01/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/azure/az-04-cli-01/</guid><description>&lt;h2 id="azure-cli"&gt;Azure Cli&lt;a class="anchor" href="#azure-cli"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Azure Command-Line Interface (CLI) is a cross-platform command-line tool to connect to Azure and execute administrative commands on Azure resources. It allows the execution of commands through a terminal using interactive command-line prompts or a script.&lt;/p&gt;
&lt;h3 id="install-azure-cli-on-macos"&gt;Install Azure CLI on macOS&lt;a class="anchor" href="#install-azure-cli-on-macos"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Mac with Intel CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew update &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; brew install azure-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install-azure-cli-with-docker"&gt;Install Azure Cli with Docker&lt;a class="anchor" href="#install-azure-cli-with-docker"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;docker run&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -it mcr.microsoft.com/azure-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run with SSH key&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -it -v &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;HOME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;/.ssh:/root/.ssh mcr.microsoft.com/azure-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="get-started"&gt;Get Started&lt;a class="anchor" href="#get-started"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sign In&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az login&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Show accounts&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az account list 
az account show&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Setup default subscription&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az account set --sbuscription XXXX-XXXXX-xXXXX-XXX&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Show App Services&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az appservice plan list --query-examples&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Show Web Apps&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az webapp list --query-examples&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>DigitialOcean: Lets Encrypt</title><link>https://harryho.github.io/cloud/digito/digito-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/digito/digito-note-4/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Here I continue to finish the web host setup. The last step of web host setup is to add SSL certificate for each site&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="lets-encrypt"&gt;Lets Encrypt&lt;a class="anchor" href="#lets-encrypt"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt; is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol, which typically runs on your web host.&lt;/p&gt;</description></item><item><title>F# C.U.R.S.</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-4/</guid><description>&lt;h2 id="class"&gt;Class&lt;a class="anchor" href="#class"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Classes are types that represent objects that can have properties, methods, and events.&lt;/p&gt;
&lt;h3 id="syntax"&gt;Syntax&lt;a class="anchor" href="#syntax"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;// Class definition:
type [access-modifier] type-name [type-params] [access-modifier] ( parameter-list ) [ as identifier ] =
[ class ]
[ inherit base-type-name(base-constructor-args) ]
[ let-bindings ]
[ do-bindings ]
member-list
...
[ end ]
// Mutually recursive class definitions:
type [access-modifier] type-name1 ...
and [access-modifier] type-name2 ...
...&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="constructors"&gt;Constructors&lt;a class="anchor" href="#constructors"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The constructor is code that creates an instance of the class type. In an F# class, there is always a primary constructor whose arguments are described in the parameter-list that follows the type name, and whose body consists of the let (and let rec) bindings at the start of the class declaration and the do bindings that follow. The arguments of the primary constructor are in scope throughout the class declaration.&lt;/p&gt;</description></item><item><title>Generic Type &amp; Trait</title><link>https://harryho.github.io/coding/rustlang/rust-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/rustlang/rust-note-4/</guid><description>&lt;h3 id="generic-type"&gt;Generic Type&lt;a class="anchor" href="#generic-type"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Generics are abstract stand-ins for concrete types or other properties. When we’re writing code, we can express the behavior of generics or how they relate to other generics without knowing what will be in their place when compiling and running the code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="removing-duplication-by-extracting-a-function"&gt;Removing Duplication by Extracting a Function&lt;a class="anchor" href="#removing-duplication-by-extracting-a-function"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;steps we took to change the duplication code :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Identify duplicate code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Extract the duplicate code into the body of the function and specify the inputs and return values of that code in the function signature.&lt;/p&gt;</description></item><item><title>IO, Json &amp; XML</title><link>https://harryho.github.io/coding/golang/go-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-4/</guid><description>&lt;h3 id="io---read--write"&gt;IO - Read &amp;amp; Write&lt;a class="anchor" href="#io---read--write"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="read-from-user-input"&gt;Read from user input&lt;a class="anchor" href="#read-from-user-input"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;var&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;firstName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;lastName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;s&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;float32&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;input&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;56.12 / 5212 / Go&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;format&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;%f / %d / %s&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Please enter your full name: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Scanln&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;firstName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;lastName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// fmt.Scanf(&amp;#34;%s %s&amp;#34;, &amp;amp;firstName, &amp;amp;lastName)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Hi %s %s!\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;firstName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;lastName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Hi Chris Naegels&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Sscanf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;input&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;format&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;s&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;From the string we read: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;s&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// ouwtput: From the string we read: 56.12 5212 Go&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="read-command-line-argument"&gt;Read command-line argument&lt;a class="anchor" href="#read-command-line-argument"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;who&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Harry &amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Args&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;who&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;strings&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Join&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Args&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:],&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Good Morning&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;who&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="read-from-file"&gt;Read from file&lt;a class="anchor" href="#read-from-file"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Read by lines&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputFile&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputError&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Open&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello.go&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputError&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;An error occurred on opening the inputfile\n&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Does the file exist?\n&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Have you got acces to it?\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// exit the function on error&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;defer&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputFile&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Close&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Close file before exits the main func&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputReader&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;bufio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;NewReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputFile&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;readerError&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;ReadString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;readerError&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;io&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;EOF&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;The input was: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;inputString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE: The End-of-line characters of text-files in Unix end on \n, but in Windows this is \r\n. By using the method ReadString or ReadBytes with \n as a delimiter you don’t have to worry about this.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Iteration</title><link>https://harryho.github.io/coding/python/python-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-4/</guid><description>&lt;h2 id="iterables--iteration"&gt;Iterables &amp;amp; Iteration&lt;a class="anchor" href="#iterables--iteration"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="comprehensions"&gt;Comprehensions&lt;a class="anchor" href="#comprehensions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Comprehensions can process more than one input sequence&lt;/li&gt;
&lt;li&gt;Multiple input sequences in comprehensions work like nested for-loops&lt;/li&gt;
&lt;li&gt;Comprehensions can also have multiple if-clauses interspersed with the for-clauses&lt;/li&gt;
&lt;li&gt;Later clauses in a comprehension can reference variables bound in earlier clauses&lt;/li&gt;
&lt;li&gt;Comprehension can also appear in the result expression of a comprehension, resulting in nested sequences&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Comprehensions &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_c&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_c
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_d&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; x &lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_e &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt; y&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; points_e
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[[],&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="functional-style-tools"&gt;Functional-style tools&lt;a class="anchor" href="#functional-style-tools"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Python provides a number of functional-style tools for working with iterators&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="map"&gt;Map&lt;a class="anchor" href="#map"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; calls a function for each element in its input sequences&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; returns an iterable object, not a fully-evaluated collection&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; results are lazily evaluated, meaning that you must access them to
force their calculation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; results are typically evaluated through the use of iteration constructs such as for-loops&lt;/li&gt;
&lt;li&gt;You must provide as many input sequences to &lt;code&gt;map()&lt;/code&gt; as the callable argument has parameters&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; takes one element from each input sequence for each output element
it produces&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; stops producing output when its shortest input sequence is exhausted&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map()&lt;/code&gt; can be used to implement the same behavior as comprehensions in some cases&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-1"&gt;Example&lt;a class="anchor" href="#example-1"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; sizes &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;small&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;medium&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;large&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; colors &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;lavender&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;teal&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;burnt orange&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; animals &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;koala&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;platypus&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;salamander&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;combine&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; size&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; color&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animal&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;format&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;size&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; color&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animal&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;map&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;combine&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sizes&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; colors&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animals &lt;span style="color:#1f2328"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;small lavender koala&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;medium teal platypus&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;large burnt orange salamander&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;itertools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;combine2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;quantity&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; size&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; color&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animal&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; - &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;format&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;quantity&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; size&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; color&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animal&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;map&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;combine2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; itertools&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;count&lt;span style="color:#1f2328"&gt;(),&lt;/span&gt; sizes&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; colors&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; animals &lt;span style="color:#1f2328"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;0 - small lavender koala&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;1 - medium teal platypus&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;2 - large burnt orange salamander&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="filter"&gt;Filter&lt;a class="anchor" href="#filter"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;filter()&lt;/code&gt; selects values from an input sequence which match a specified criteria&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter()&lt;/code&gt; passes each element in its input sequence to the function argument&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter()&lt;/code&gt; returns an iterable over the input elements for which the function argument is truthy&lt;/li&gt;
&lt;li&gt;Like &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt; produces its output lazily If you pass None as the first argument to &lt;code&gt;filter()&lt;/code&gt;, it yields the input values which evaluate to True in a boolean context &lt;code&gt;reduce()&lt;/code&gt; cumulatively applies a function to the elements of an input sequence&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-2"&gt;Example&lt;a class="anchor" href="#example-2"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## filter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; negs &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;lambda&lt;/span&gt; x&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;33&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;negs&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;33&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; notnones &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[],&lt;/span&gt; &lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{},&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,),&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;yes&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;map&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;type&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;notnones&lt;span style="color:#1f2328"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;int&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;gt;, &amp;lt;class &amp;#39;&lt;/span&gt;&lt;span style="color:#6639ba"&gt;bool&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;gt;, &amp;lt;class &amp;#39;&lt;/span&gt;&lt;span style="color:#6639ba"&gt;tuple&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;gt;, &amp;lt;class &amp;#39;&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;gt;, &amp;lt;class &amp;#39;&lt;/span&gt;&lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="reduce"&gt;Reduce&lt;a class="anchor" href="#reduce"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reduce()&lt;/code&gt; calls the input function with two arguments: the accumulated result so far, and the next element in the sequence&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce()&lt;/code&gt; is a generalization of summation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce()&lt;/code&gt; returns the accumulated result after all of the input has been processed&lt;/li&gt;
&lt;li&gt;If you pass an empty sequence to &lt;code&gt;reduce()&lt;/code&gt; it will raise a TypeError&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce()&lt;/code&gt; accepts an optional initial value argument&lt;/li&gt;
&lt;li&gt;This initial value is conceptually added to the front of the input sequence&lt;/li&gt;
&lt;li&gt;The initial value is returned if the input sequence is empty&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;map()&lt;/code&gt; and &lt;code&gt;reduce()&lt;/code&gt; functions in Python are related to the ideas in the map-reduce algorithm&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-3"&gt;Example&lt;a class="anchor" href="#example-3"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## reduce&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;functools&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; reduce
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;operator&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; reduce&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;operator&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;### x is interim result , y is the next sequence value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;mul&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; y&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; mul &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; &amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;format&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;y&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; reduce&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; mul&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mul &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mul &lt;span style="color:#0550ae"&gt;2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mul &lt;span style="color:#0550ae"&gt;6&lt;/span&gt; &lt;span style="color:#0550ae"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;24&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="the-next-function"&gt;The next() function&lt;a class="anchor" href="#the-next-function"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Python&amp;rsquo;s next() function calls &lt;code&gt;__next__()&lt;/code&gt; on its argument&lt;/li&gt;
&lt;li&gt;Iterators in Python must support the &lt;code&gt;__next__()&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__next__()&lt;/code&gt; should return the next item in the sequence, or raise &lt;code&gt;StopIteration&lt;/code&gt; if it is exhausted&lt;/li&gt;
&lt;li&gt;Python&amp;rsquo;s &lt;code&gt;iter()&lt;/code&gt; function calls &lt;code&gt;__iter__()&lt;/code&gt; on its argument&lt;/li&gt;
&lt;li&gt;Iterable objects in Python must support the &lt;code&gt;__iter__()&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__iter__()&lt;/code&gt; should return an iterator for the iterable object&lt;/li&gt;
&lt;li&gt;Objects with a &lt;code&gt;__getitem__()&lt;/code&gt; method that accepts consecutive integer indices starting at zero are also iterables&lt;/li&gt;
&lt;li&gt;Iterables implemented via &lt;code&gt;__getitem__()&lt;/code&gt; must raise &lt;code&gt;IndexError&lt;/code&gt; when they are exhausted&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-of-iterator"&gt;Example of Iterator&lt;a class="anchor" href="#example-of-iterator"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;ExampleIterator&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; data&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__iter__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__next__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;raise&lt;/span&gt; StopIteration&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rslt &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;index&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;+=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; rslt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="example-of-iterable"&gt;Example of Iterable&lt;a class="anchor" href="#example-of-iterable"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;ExampleIterable&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__iter__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; ExampleIterator&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="example-of-anotheriterable"&gt;Example of AnotherIterable&lt;a class="anchor" href="#example-of-anotheriterable"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;AnotherIterable&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__getitem__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; idx&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;data&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;idx&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="the-iter-function"&gt;The iter() function&lt;a class="anchor" href="#the-iter-function"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The extended form of &lt;code&gt;iter()&lt;/code&gt; accepts a zero-argument callable and a sentinel value&lt;/li&gt;
&lt;li&gt;Extended &lt;code&gt;iter()&lt;/code&gt; repeatedly calls the callable argument until it returns the sentinel value&lt;/li&gt;
&lt;li&gt;The values produced by extended &lt;code&gt;iter()&lt;/code&gt; are those returned from the callable&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-4"&gt;Example&lt;a class="anchor" href="#example-4"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; ts &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;iter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;now&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;next&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ts&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;datetime&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2017&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;38&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;752761&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;next&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ts&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;datetime&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2017&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;38&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;13&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;373613&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;next&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ts&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;datetime&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2017&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;38&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;14&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;754588&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Read file &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Content of the file file.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## You are reading &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## the file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## you won&amp;#39;t read &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## the &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## END&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## but not see the END above&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; &lt;span style="color:#6639ba"&gt;open&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;file.txt&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;rt&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; f&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; line &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;iter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;lambda&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; f&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;readline&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;strip&lt;span style="color:#1f2328"&gt;(),&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;END&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;You are reading
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;the file
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;you won&lt;span style="color:#0a3069"&gt;&amp;#39;t read&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;the&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;One use case for extended &lt;code&gt;iter()&lt;/code&gt; is to iterate using simple functions&lt;/li&gt;
&lt;li&gt;Protocol conforming iterators must also be iterable&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="example-of-sensor"&gt;Example of Sensor&lt;a class="anchor" href="#example-of-sensor"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;datetime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;itertools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;random&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Sensor&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__iter__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__next__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; random&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;random&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sensor &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Sensor&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;timestamps &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;iter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;datetime&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;now&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; stamp&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; value &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; itertools&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;islice&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;zip&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;timestamps&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sensor&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;stamp&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; value&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; time&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;sleep&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AWS: VPC - 3</title><link>https://harryho.github.io/cloud/aws/aws-03-vpc-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-03-vpc-3/</guid><description>&lt;h2 id="vpc-part-3"&gt;VPC Part 3&lt;a class="anchor" href="#vpc-part-3"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="endpoint"&gt;Endpoint&lt;a class="anchor" href="#endpoint"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A VPC endpoint enables you to privately connect your VPC to supported AWS services and VPC endpoint services powered by AWS PrivateLink without requiring an internet gateway, NAT device, VPN connection, or AWS Direct Connect connection.&lt;/p&gt;
&lt;p&gt;Endpoints are virtual devices. They are horizontally scaled, redundant, and highly available VPC components. They allow communication between instances in your VPC and services without imposing availability risks or bandwidth constraints on your network traffic.&lt;/p&gt;</description></item><item><title>Error handling</title><link>https://harryho.github.io/coding/golang/go-note-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-5/</guid><description>&lt;h3 id="error-handling"&gt;Error handling&lt;a class="anchor" href="#error-handling"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Go does not have an exception mechanism, like the try/catch in Java or .NET for instance: you cannot throw exceptions. Instead it has a defer-panic-and-recover mechanism.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Go way to handle errors is for functions and methods to return an error object as their only or last return value—or nil if no error occurred—and for calling functions to always check the error they receive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Handle the errors and return from the function in which the error occurred with an error message to the user: that way if something does go wrong, your program will continue to function and the user will be notified. The purpose of panic-and-recover is to deal with genuinely exceptional (so unexpected) problems and not with normal errors.&lt;/p&gt;</description></item><item><title>F# Collections 1</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-5/</guid><description>&lt;h2 id="array"&gt;Array&lt;a class="anchor" href="#array"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Arrays are fixed-size, zero-based, mutable collections of consecutive data elements that are all of the same type.&lt;/p&gt;
&lt;h3 id="create-array"&gt;Create array&lt;a class="anchor" href="#create-array"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;array1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Put each element on a separate line, in which case the semicolon separator is optional.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;array1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The type of the array elements is inferred from the literals used and must be consistent. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The following code causes an error because 1.0 is a float and 2 and 3 are integers.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Causes an error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// let array2 = [| 1.0; 2; 3 |]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Use sequence expressions to create arrays.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;array3&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use Array.zeroCreate
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;arrayOfTenZeroes&lt;/span&gt; &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int array &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;zeroCreate 10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use Array.empty
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;myEmptyArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;empty
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Length of empty array: %d&amp;#34;&lt;/span&gt; myEmptyArray&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Length
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Length of empty array: 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use Array.create
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Array of floats set to 5.0: %A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;create 10 5&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Area of floats set to 5.0: [|5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.init
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Array of squares: %A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;init 10 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; index&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Array &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; squares&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 4&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 9&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 16&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 25&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 36&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 49&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 64&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 81&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="copy"&gt;Copy&lt;a class="anchor" href="#copy"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;open&lt;/span&gt; &lt;span style="color:#24292e"&gt;System.Text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;firstArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; StringBuilder array &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;init 3 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; StringBuilder&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;secondArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;copy firstArray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Reset an element of the first array to a new value.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firstArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; StringBuilder&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Test1&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Change an element of the first array.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firstArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;].&lt;/span&gt;Insert&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Test2&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; ignore
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; firstArray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; secondArray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|Test1; Test2; |]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|;&lt;/span&gt; Test2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="access"&gt;Access&lt;a class="anchor" href="#access"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Accesses elements from 0 to 2.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;array1&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Accesses elements from the beginning of the array to 2.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;array1&lt;span style="color:#0550ae"&gt;[..&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Accesses elements from 2 to the end of the array.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;array1&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;..]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="functions"&gt;Functions&lt;a class="anchor" href="#functions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.sub 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;a1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 99 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;a2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;sub a1 5 10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; a2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|5; 6; 7; 8; 9; 10; 11; 12; 13; 14|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.append creates a new array by combining two existing arrays.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;append &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 3&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 4&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 5&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 6&lt;span style="color:#0550ae"&gt;|])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|1; 2; 3; 4; 5; 6|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.choose selects elements of an array to include in a new array. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;choose &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;elem&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;elem &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; None&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|3.0; 15.0; 35.0; 63.0; 99.0|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.collect runs a specified function on each array element of an existing array and then collects the elements generated by the function and combines them into a new array. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;collect &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;|])&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 5&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 10&lt;span style="color:#0550ae"&gt;|])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|0; 1; 0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;concat takes a sequence &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; arrays &lt;span style="color:#0550ae"&gt;and&lt;/span&gt; combines them into a &lt;span style="color:#cf222e"&gt;single&lt;/span&gt; array&lt;span style="color:#0550ae"&gt;.&lt;/span&gt; The following code demonstrates &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;concat&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;F&lt;span style="color:#0550ae"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Copy
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;concat &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;4&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;//output [|0; 1; 2; 3; 4|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;concat &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;4&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;//output [|0; 1; 2; 3; 4|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.filter takes a Boolean condition function and generates a new array that contains only those elements from the input array for which the condition is true.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;filter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10&lt;span style="color:#0550ae"&gt;|])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|2; 4; 6; 8; 10|]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.rev generates a new array by reversing the order of an existing array. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;stringReverse&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;s&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;rev &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;s&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ToCharArray&lt;span style="color:#6a737d"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;stringReverse&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;!dlrow olleH&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// &amp;#34;Hello world!&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// You can easily combine functions in the array module that transform arrays by using the pipeline operator (|&amp;gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;filter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;choose &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;elem &lt;span style="color:#0550ae"&gt;&amp;lt;&amp;gt;&lt;/span&gt; 8&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;elem&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; None&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;rev
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;100&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 36&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 16&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 4&lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multidimensional-arrays"&gt;Multidimensional arrays&lt;a class="anchor" href="#multidimensional-arrays"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;my2DArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; array2D &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;];&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;arrayOfArrays&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0 &lt;span style="color:#0550ae"&gt;|];&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;twoDimensionalArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array2D&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;init 2 2 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; i j &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; arrayOfArrays&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;][&lt;/span&gt;j&lt;span style="color:#0550ae"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="slicing"&gt;Slicing&lt;a class="anchor" href="#slicing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get rows 1 to N from an NxM matrix (returns a matrix):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;..,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get rows 1 to 3 from a matrix (returns a matrix):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get columns 1 to 3 from a matrix (returns a matrix):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[*,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get a 3x3 submatrix:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get row 3 from a matrix as a vector:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Get column 3 from a matrix as a vector:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix&lt;span style="color:#0550ae"&gt;[*,&lt;/span&gt; 3&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="matrix--slicing"&gt;Matrix &amp;amp; slicing&lt;a class="anchor" href="#matrix--slicing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Matrix&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;T&lt;span style="color:#0550ae"&gt;&amp;gt;(&lt;/span&gt;N&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; M&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;internalArray&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array2D&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;zeroCreate&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;T&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; N M
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;member&lt;/span&gt; this&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Item&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; get&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;and&lt;/span&gt; set&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;value&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;T&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; value
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;member&lt;/span&gt; this&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;GetSlice&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;rowStart&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; rowFinish &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colStart&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colFinish &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rowStart&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; rowStart &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rowFinish&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; rowFinish &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetLength&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;colStart&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; colStart &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;colFinish&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; colFinish &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetLength&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; internalArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;rowStart&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;rowFinish&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colStart&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;colFinish&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;member&lt;/span&gt; this&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;GetSlice&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;row&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colStart&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colFinish&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;colStart&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; colStart &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;colFinish&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; colFinish &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetLength&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; internalArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;row&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; colStart&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;colFinish&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;member&lt;/span&gt; this&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;GetSlice&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;rowStart&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; rowFinish&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rowStart&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; rowStart &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rowFinish&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; rowFinish &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;v&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; internalArray&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetLength&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; internalArray&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;rowStart&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;rowFinish&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;module&lt;/span&gt; &lt;span style="color:#24292e"&gt;test&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;generateTestMatrix&lt;/span&gt; x y &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;matrix&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; Matrix&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;(&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 3&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;2 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; j &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;2 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; matrix&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; j&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;j&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; matrix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;test1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; generateTestMatrix 2&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;3 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;submatrix&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; test1&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printfn &lt;span style="color:#0550ae"&gt;$&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;{submatrix}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;firstRow&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; test1&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;,*]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;secondRow&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; test1&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;,*]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;firstCol&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; test1&lt;span style="color:#0550ae"&gt;[*,&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printfn &lt;span style="color:#0550ae"&gt;$&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;{firstCol}&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="search"&gt;Search&lt;a class="anchor" href="#search"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.find takes a Boolean function and returns the first element for which 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the function returns true, or raises a 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// System.Collections.Generic.KeyNotFoundException if no element that satisfies
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the conditionis found. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.findIndex is like Array.find, except that it returns the index of 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the element instead of the element itself.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The following code uses Array.find and Array.findIndex to locate a number that 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// is both a perfect square and perfect cube.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;arrayA&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;delta&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0e&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectSquare&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; sqrt &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectCube&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Math&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Pow&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;element&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;find &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; isPerfectSquare elem &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; isPerfectCube elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; arrayA
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;index&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;findIndex &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; isPerfectSquare elem &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; isPerfectCube elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; arrayA
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;The first element that is both a square and a cube is %d and its index is %d.&amp;#34;&lt;/span&gt; element index
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output is as follows.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The first element that is both a square and a cube is 64 and its index is 62.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ----------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Array.tryFind is like Array.find, except that its result is an option type, 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// and it returns None if no element is found. Array.tryFind should be used 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// instead of Array.find when you do not know whether a matching element is 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// in the array. Similarly, Array.tryFindIndex is like Array.findIndex except 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// that the option type is the return value. If no element is found, the option is None.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;delta&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0e&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectSquare&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; sqrt &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectCube&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Math&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Pow&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;lookForCubeAndSquare&lt;/span&gt; array1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;result&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tryFind &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; isPerfectSquare elem &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; isPerfectCube elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; array1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; result &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some x &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Found an element: %d&amp;#34;&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to find a matching element.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lookForCubeAndSquare &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lookForCubeAndSquare &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 1000 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lookForCubeAndSquare &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 50 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output is as follows.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element: 729
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Failed to find a matching element.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ----------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Use Array.tryPick when you need to transform an element in addition to finding it. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The result is the first element for which the function returns the transformed 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// element as an option value, or None if no such element is found.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The following code shows the use of Array.tryPick. In this case, instead of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// a lambda expression, several local helper functions are defined to simplify the code.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;findPerfectSquareAndCube&lt;/span&gt; array1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;delta&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0e&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectSquare&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; sqrt &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isPerfectCube&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;y&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Math&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Pow&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; abs&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;y &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; round y&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// intFunction : (float -&amp;gt; float) -&amp;gt; int -&amp;gt; int
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// Allows the use of a floating point function with integers.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;intFunction&lt;/span&gt; function1 number &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; int &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;round &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;function1 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt; number&lt;span style="color:#0550ae"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;cubeRoot&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Math&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Pow&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// testElement: int -&amp;gt; (int * int * int) option
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// Test an element to see whether it is a perfect square and a perfect
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// cube, and, if so, return the element, square root, and cube root
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// as an option value. Otherwise, return None.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;testElement&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; isPerfectSquare elem &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; isPerfectCube elem &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;elem&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; intFunction sqrt elem&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; intFunction cubeRoot elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tryPick testElement array1 &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;n&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; sqrt&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; cuberoot&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Found an element %d with square root %d and cube root %d.&amp;#34;&lt;/span&gt; n sqrt cuberoot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Did not find an element that is both a perfect square and a perfect cube.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;findPerfectSquareAndCube &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;findPerfectSquareAndCube &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;findPerfectSquareAndCube &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 1000 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;findPerfectSquareAndCube &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1000 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10000 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;findPerfectSquareAndCube &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 50 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output is as follows.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element 1 with square root 1 and cube root 1.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element 64 with square root 8 and cube root 4.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element 729 with square root 27 and cube root 9.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found an element 4096 with square root 64 and cube root 16.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Did &lt;span style="color:#0550ae"&gt;not&lt;/span&gt; find an element that is both a perfect square &lt;span style="color:#0550ae"&gt;and&lt;/span&gt; a perfect cube&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="modify-arrays"&gt;Modify arrays&lt;a class="anchor" href="#modify-arrays"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Array.set sets an element to a specified value. Array.fill sets a range of elements in an array to a specified value. The following code provides an example of Array.fill.&lt;/p&gt;</description></item><item><title>F# Collections 2</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-6/</guid><description>&lt;h2 id="list"&gt;List&lt;a class="anchor" href="#list"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A list in F# is an ordered, immutable series of elements of the same type. To perform basic operations on lists, use the functions in the List module.&lt;/p&gt;
&lt;h3 id="creating--appending"&gt;Creating &amp;amp; appending&lt;a class="anchor" href="#creating--appending"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Creating and Initializing Lists&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// --- creating ---
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;list123&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// You can also put line breaks between elements, in which case the semicolons are optional. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;list123&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 3 &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Normally, all list elements must be the same type. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// An exception is that a list in which the elements are specified to be a base type
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// can have elements that are derived types. Thus the following is acceptable, 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// because both Button and CheckBox derive from Control.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;myControlList&lt;/span&gt; &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; Control &lt;span style="color:#cf222e"&gt;list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; Button&lt;span style="color:#6a737d"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; CheckBox&lt;span style="color:#6a737d"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// using a range indicated by integers separated by the range operator (..)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;list1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// An empty list.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;listEmpty&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6a737d"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use a sequence expression to create a list.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;listOfSquares&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; i&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ---- appending -------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// You can attach elements to a list by using the :: (cons) operator. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// If list1 is [2; 3; 4], the following code creates list2 as [100; 2; 3; 4].
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;list2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;::&lt;/span&gt; list1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// You can concatenate lists that have compatible types by using the @ operator, as in the following code. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// If list1 is [2; 3; 4] and list2 is [100; 2; 3; 4], this code creates list3 as [2; 3; 4; 100; 2; 3; 4].
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;list3&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; list1 &lt;span style="color:#0550ae"&gt;@&lt;/span&gt; list2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="properties"&gt;Properties&lt;a class="anchor" href="#properties"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The list type supports the following properties:&lt;/p&gt;</description></item><item><title>Inheritance &amp; Polymorphism</title><link>https://harryho.github.io/coding/python/python-note-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-5/</guid><description>&lt;h2 id="inheritance--polymorphism"&gt;Inheritance &amp;amp; Polymorphism&lt;a class="anchor" href="#inheritance--polymorphism"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Specify single inheritance by putting a base class in parentheses after defining a class&amp;rsquo;s name&lt;/li&gt;
&lt;li&gt;Subclasses have all of the methods of their base class&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s often best to explicitly call a base class initializer from a subclass&amp;rsquo;s initializer&lt;/li&gt;
&lt;li&gt;If a class with a single base class doesn&amp;rsquo;t define an initializer, the base class&amp;rsquo;s initializer will be called automatically on construction&lt;/li&gt;
&lt;li&gt;Python treats &lt;code&gt;__init__()&lt;/code&gt; like any other method&lt;/li&gt;
&lt;li&gt;Base class &lt;code&gt;__init__()&lt;/code&gt; is not called if overridden&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;super()&lt;/code&gt; to call base class &lt;code&gt;__init__()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isinstance()&lt;/code&gt; takes an object as its first argument and a type as its second&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isinstance()&lt;/code&gt; determines if its first argument is an instance of the second argument, or any subclass of the second argument&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isinstance()&lt;/code&gt; can accept a tuple of types as its second argument, in which it returns True if the first argument is of any of those types&lt;/li&gt;
&lt;li&gt;Checking for specific types is rare in Python and is sometimes regarded as bad design&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isinstance()&lt;/code&gt; determines if its first argument is a direct or indirect subclass of, or the same type as, the second argument&lt;/li&gt;
&lt;li&gt;Multiple inheritance means having more than one direct base class&lt;/li&gt;
&lt;li&gt;You declare multiple base classes with a comma-separated list of class names in parentheses after a class&amp;rsquo;s name in a class definition&lt;/li&gt;
&lt;li&gt;A class can have as many base classes as you want&lt;/li&gt;
&lt;li&gt;Python uses a well-defined &amp;ldquo;method resolution order&amp;rdquo; to resolve methods at runtime&lt;/li&gt;
&lt;li&gt;If a multiply-inheriting class defines no initializer, Python will automatically call the initializer of its first base class on construction&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__bases__&lt;/code&gt; is a tuple of types on a class object which defines the base classes for the class&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__bases__&lt;/code&gt; is in the same order as in the class definition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__bases__&lt;/code&gt; is populated for both single and multiple inheritance&lt;/li&gt;
&lt;li&gt;Method resolution order defines the order in which Python will search an inheritance graph for methods&lt;/li&gt;
&lt;li&gt;MRO is short for Method Resolution Order&lt;/li&gt;
&lt;li&gt;MRO is stored as a tuple of types in the &lt;code&gt;__mro__&lt;/code&gt; attribute of a class&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;mro()&lt;/code&gt; method on type objects returns the contents of &lt;code&gt;__mro__&lt;/code&gt; as a list&lt;/li&gt;
&lt;li&gt;To resolve a method, Python uses the first entry in a class&amp;rsquo;s MRO which has the requested method&lt;/li&gt;
&lt;li&gt;MRO is dependent on base class declaration order&lt;/li&gt;
&lt;li&gt;MRO is calculated by Python using the C3 algorithm&lt;/li&gt;
&lt;li&gt;MRO honors base-class ordering from class definitions&lt;/li&gt;
&lt;li&gt;MRO puts subclasses before base classes&lt;/li&gt;
&lt;li&gt;The relative order of classes in an MRO is consistent across all classes&lt;/li&gt;
&lt;li&gt;It is possible to specify an inconsistent base class ordering, in which case Python will raise a TypeError when the class definition is reached&lt;/li&gt;
&lt;li&gt;&lt;code&gt;super()&lt;/code&gt; operates by using the elements in an MRO that come after some specified type&lt;/li&gt;
&lt;li&gt;&lt;code&gt;super()&lt;/code&gt; returns a proxy object which forwards calls to the correct objects&lt;/li&gt;
&lt;li&gt;There are two distinct types of &lt;code&gt;super()&lt;/code&gt; proxies, bound and unbound&lt;/li&gt;
&lt;li&gt;Unbound &lt;code&gt;super()&lt;/code&gt; proxies are primarily used for implementing other Python features&lt;/li&gt;
&lt;li&gt;Bound proxies can be bound to either class objects or instances&lt;/li&gt;
&lt;li&gt;Calling &lt;code&gt;super()&lt;/code&gt; with a base-class and derived-class argument returns a proxy bound to a class&lt;/li&gt;
&lt;li&gt;Calling &lt;code&gt;super()&lt;/code&gt; with a class and an instance of that class returns a proxy bound to an instance&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;super()&lt;/code&gt; proxy takes the MRO of its second argument (or the type of its second argument), finds the first argument in that MRO, and uses everything after it in the MRO for method resolution&lt;/li&gt;
&lt;li&gt;Since class-bound proxies aren&amp;rsquo;t bound to an instance, you can’t directly call instance methods that they resolve for you&lt;/li&gt;
&lt;li&gt;However, classmethods resolved by class-bound proxies can be called directly&lt;/li&gt;
&lt;li&gt;Python will raise a TypeError if the second argument is not a subclass or instance of the first argument&lt;/li&gt;
&lt;li&gt;Inappropriate use of &lt;code&gt;super()&lt;/code&gt; can violate some design constraints * Calling &lt;code&gt;super()&lt;/code&gt; with no arguments inside an instance method produces an instance-bound proxy&lt;/li&gt;
&lt;li&gt;Calling &lt;code&gt;super()&lt;/code&gt; with no arguments inside a classmethod produces a class-bound proxy&lt;/li&gt;
&lt;li&gt;In both cases, the no-argument form of &lt;code&gt;super()&lt;/code&gt; is the same as calling &lt;code&gt;super()&lt;/code&gt; with the method&amp;rsquo;s class as the first argument and the method&amp;rsquo;s first argument as the second&lt;/li&gt;
&lt;li&gt;Since &lt;code&gt;super()&lt;/code&gt; works on MROs and not just a class&amp;rsquo;s base classes, class can be designed to cooperate without prior knowledge of one another&lt;/li&gt;
&lt;li&gt;The class object is at the core of Python&amp;rsquo;s object model&lt;/li&gt;
&lt;li&gt;object is the ultimate base class for all other classes in Python&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t specify a base class for a class, Python automatically uses object as the base&lt;/li&gt;
&lt;li&gt;Because object is in every class&amp;rsquo;s inheritance graph, it shows up in every MRO.&lt;/li&gt;
&lt;li&gt;object provides hooks for Python&amp;rsquo;s comparison operators&lt;/li&gt;
&lt;li&gt;object provides default &lt;code&gt;__repr__()&lt;/code&gt; and &lt;code&gt;__str__()&lt;/code&gt; implementations&lt;/li&gt;
&lt;li&gt;object implements the core attribute lookup and management functionality in Python&lt;/li&gt;
&lt;li&gt;Inheritance in Python is best used as a way to share implementation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="explanation-with-example"&gt;Explanation with example&lt;a class="anchor" href="#explanation-with-example"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="example-code"&gt;Example code&lt;a class="anchor" href="#example-code"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The code below demonstrates the weird &lt;code&gt;super()&lt;/code&gt; in Python&lt;/p&gt;</description></item><item><title>AWS: VPC - 4</title><link>https://harryho.github.io/cloud/aws/aws-03-vpc-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-03-vpc-4/</guid><description>&lt;h2 id="vpc-part-4"&gt;VPC Part 4&lt;a class="anchor" href="#vpc-part-4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="simples-demo"&gt;Simples demo&lt;a class="anchor" href="#simples-demo"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Diagram of customized VPC - MyDemoVPC with Internet Gatway and VPN connect&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="mermaid" &gt;
graph LR
 InternetGW(Internet Gateway)
 VirtualGW(Virtual Gateway)
 INTER(Internet - Public)
 InternetGW --- INTER
 VirtualGW --- SERVER
 subgraph MyDemoVPC
 EC2_A(EC2 Instannce A)
 EC2_B(EC2 Instannce B)
 EC2_E(EC2 Instannce E)
 EC2_F(EC2 Instannce F)
 EC2_C[(Database Master)]
 EC2_D[(Database Slave)]
 MainRouteTable(10.0.0.0/16)
 PrvSubnet(10.0.2.0/24)
 PubSubnet(10.0.1.0/24)
 VPNSubnet(10.0.3.0/24)
 MainRouteTable --- InternetGW
 MainRouteTable --- NetworkACL
 NetworkACL --- PubSecGrp
 NetworkACL --- PrivSecGrp
 PrivSecGrp --- PrvSubnet
 VPNSubnet --- VirtualGW
 VPNSubnet --- MainRouteTable
 PubSecGrp --- PubSubnet
 subgraph Implied_Router
 MainRouteTable(10.0.0.0/16)
 end 
 subgraph Private_Subnet
 PrvSubnet
 EC2_C
 EC2_D
 end
 subgraph Public_Subnet
 PubSubnet
 EC2_A
 EC2_B
 end
 subgraph VPN_Subnet
 VPNSubnet
 EC2_E
 EC2_F
 end
 end
 InternetGW
 subgraph Internet
 INTER
 end
 subgraph OnPremise
 SERVER
 end


&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Customized Route tables of Subnet Public_Subnet&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Destination&lt;/th&gt;
					&lt;th&gt;Target&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;10.0.1.0/16&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2002:0a00:0100:0:0:0:0:0/56&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;0.0.0.0/0&lt;/td&gt;
					&lt;td&gt;InternetGW&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;::0/0&lt;/td&gt;
					&lt;td&gt;InternetGW&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Main Route tables of Subnet Private_Subnet&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Destination&lt;/th&gt;
					&lt;th&gt;Target&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;10.0.1.0/16&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2002:0a00:0100:0:0:0:0:0/56&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Route table of Subnet VPN_Subnet&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Destination&lt;/th&gt;
					&lt;th&gt;Target&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;10.0.1.0/16&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2002:0a00:0100:0:0:0:0:0/56&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;0.0.0.0/0&lt;/td&gt;
					&lt;td&gt;VirtualGW&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>AWS: VPC - 5</title><link>https://harryho.github.io/cloud/aws/aws-03-vpc-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-03-vpc-5/</guid><description>&lt;h2 id="vpc-part-5"&gt;VPC Part 5&lt;a class="anchor" href="#vpc-part-5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="direct-connect"&gt;Direct Connect&lt;a class="anchor" href="#direct-connect"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AWS Direct Connect is a cloud service solution that makes it easy to establish a dedicated network connection from your premises to AWS. Using AWS Direct Connect, you can establish private connectivity between AWS and your datacenter, office, or colocation environment, which in many cases can reduce your network costs, increase bandwidth throughput, and provide a more consistent network experience than Internet-based connections.&lt;/p&gt;
&lt;p&gt;Using industry standard 802.1q VLANs, this dedicated connection can be partitioned into multiple virtual interfaces. This allows you to use the same connection to access public resources such as objects stored in Amazon S3 using public IP address space, and private resources such as Amazon EC2 instances running within an Amazon Virtual Private Cloud (VPC) using private IP space, while maintaining network separation between the public and private environments. Virtual interfaces can be reconfigured at any time to meet your changing needs.&lt;/p&gt;</description></item><item><title>Collection</title><link>https://harryho.github.io/coding/python/python-note-6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-6/</guid><description>&lt;h2 id="collection"&gt;Collection&lt;a class="anchor" href="#collection"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="collection-protocols"&gt;Collection protocols&lt;a class="anchor" href="#collection-protocols"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To implement a protocol, objects must support certain operations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Most collections implement container, sized and iterable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All except dict and set are sequences&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Container&lt;/strong&gt;: membership testing using &lt;code&gt;in&lt;/code&gt; and &lt;code&gt;not in&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sized&lt;/strong&gt;: Determine number of elements with &lt;code&gt;len(s)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iterable&lt;/strong&gt;: Can produce an iterator with &lt;code&gt;iter(s)&lt;/code&gt;, e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; for item in iterable:
 do_something(item) `len(s)`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sequence&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieve elements by index, e.g. &lt;code&gt;item = seq[index]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Find items by value &lt;code&gt;index = seq.index(item)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Count items &lt;code&gt;num = seq.count(item)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Produce a reversed sequence &lt;code&gt;r = reversed(seq)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set&lt;/strong&gt;: set algebra operations, including method and infix operators . e.g.&lt;/p&gt;</description></item><item><title>Goroutine &amp; Channel - 1</title><link>https://harryho.github.io/coding/golang/go-note-6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-6/</guid><description>&lt;h3 id="goroutine"&gt;Goroutine&lt;a class="anchor" href="#goroutine"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A goroutine is implemented as a function or method (this can also be an anonymous or lambda function) and called (invoked) with the keyword go. This starts the function running in parallel with the current computation but in the same address space and with its own stack.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go’s concurrency primitives provide the basis for a good concurrency program design: expressing program structure so as to represent independently executing actions; so Go’s emphasis is not in the 1 st place on parallelism: concurrent programs may or may not be parallel. Parallelism is the ability to make things run quickly by using multiple processors. But it turns out most often that a well designed concurrent program also has excellent performing parallel capabilities.&lt;/p&gt;</description></item><item><title>AWS: S3 - 1</title><link>https://harryho.github.io/cloud/aws/aws-04-s3-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-04-s3-1/</guid><description>&lt;h2 id="s3-part-1"&gt;S3 Part 1&lt;a class="anchor" href="#s3-part-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.&lt;/p&gt;
&lt;h3 id="storage-feature"&gt;Storage feature&lt;a class="anchor" href="#storage-feature"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Amazon S3 has various features you can use to organize and manage your data in ways that support specific use cases, enable cost efficiencies, enforce security, and meet compliance requirements. Data is stored as objects within resources called “buckets”, and a single object can be up to 5 terabytes in size. Amazon S3 offers a range of storage classes designed for different use cases.&lt;/p&gt;</description></item><item><title>AWS: S3 - 2</title><link>https://harryho.github.io/cloud/aws/aws-04-s3-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-04-s3-2/</guid><description>&lt;h2 id="s3-part-2"&gt;S3 Part 2&lt;a class="anchor" href="#s3-part-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="access"&gt;Access&lt;a class="anchor" href="#access"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="access-status"&gt;Access status&lt;a class="anchor" href="#access-status"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The list buckets view shows whether your bucket is publicly accessible. Amazon S3 labels the permissions for a bucket as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Public – Everyone has access to one or more of the following: List objects, Write objects, Read and write permissions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Objects can be public – The bucket is not public, but anyone with the appropriate permissions can grant public access to objects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Buckets and objects not public – The bucket and objects do not have any public access.&lt;/p&gt;</description></item><item><title>AWS: S3 - 3</title><link>https://harryho.github.io/cloud/aws/aws-04-s3-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-04-s3-3/</guid><description>&lt;h2 id="use-case"&gt;Use Case&lt;a class="anchor" href="#use-case"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="problem"&gt;Problem&lt;a class="anchor" href="#problem"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Block all traffic to my Amazon Simple Storage Service (Amazon S3) bucket unless the traffic is from specific Amazon Virtual Private Cloud (VPC) endpoints or certain external IP addresses.&lt;/p&gt;
&lt;h3 id="resolution"&gt;Resolution&lt;a class="anchor" href="#resolution"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Use a bucket policy to specify which VPC endpoints or external IP addresses can access the S3 bucket.&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Note: An external IP address is a public IP address that can be from within a VPC or outside of a VPC. For example, an external IP address can be an Amazon Elastic Compute Cloud (Amazon EC2) instance&amp;rsquo;s Elastic IP address, or the IP address of a VPC&amp;rsquo;s NAT gateway or proxy server.&lt;/p&gt;</description></item><item><title>AWS: SQS,SNS,SES - 1</title><link>https://harryho.github.io/cloud/aws/aws-05-ses-sqs-sns-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-05-ses-sqs-sns-1/</guid><description>&lt;h2 id="sqs"&gt;SQS&lt;a class="anchor" href="#sqs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Simple Queue Service (SQS) is a fully managed message queuing service that enables you to decouple and scale microservices, distributed systems, and serverless applications. SQS eliminates the complexity and overhead associated with managing and operating message oriented middleware, and empowers developers to focus on differentiating work. Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other services to be available. Get started with SQS in minutes using the AWS console, Command Line Interface or SDK of your choice, and three simple commands.&lt;/p&gt;</description></item><item><title>AWS: SQS,SNS,SES - 2</title><link>https://harryho.github.io/cloud/aws/aws-05-ses-sqs-sns-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-05-ses-sqs-sns-2/</guid><description>&lt;h2 id="use-case"&gt;Use Case&lt;a class="anchor" href="#use-case"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="overview"&gt;Overview&lt;a class="anchor" href="#overview"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid" &gt;
graph LR
 Sender_Email(&amp;#34;test@test.com&amp;#34;)
 Email_Failed
 Email_Delivered
 SNS_Subscriptions --&amp;gt; Email_Failed
 SNS_Subscriptions --&amp;gt; Email_Delivered
 Bounce_Notification --&amp;gt; Email_Failed
 Complaint_Notification --&amp;gt; Email_Failed
 Delivery_Notification --&amp;gt; Email_Delivered
 subgraph SQS 
 subgraph Email_Status_Queue
 SNS_Subscriptions
 end
 end 
 subgraph SNS
 subgraph Topics
 Email_Failed
 Email_Delivered
 end
 end
 subgraph SES
 Sender_Email
 subgraph Notifications
 Bounce_Notification 
 Complaint_Notification 
 Delivery_Notification 
 end
 end

&lt;/pre&gt;&lt;script src="https://harryho.github.io/mermaid.min.js" onload="mermaid.initialize({&amp;#34;flowchart&amp;#34;:{&amp;#34;useMaxWidth&amp;#34;:true},&amp;#34;theme&amp;#34;:&amp;#34;default&amp;#34;})"&gt;&lt;/script&gt;
&lt;h3 id="sns-setup"&gt;SNS Setup&lt;a class="anchor" href="#sns-setup"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a topic for failed email, e.g. bounce or spam complaint&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is named &lt;strong&gt;Email_Failed&lt;/strong&gt; in the diagram above&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a topic for delivered email&lt;/p&gt;</description></item><item><title>Exception &amp; Assertion</title><link>https://harryho.github.io/coding/python/python-note-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-7/</guid><description>&lt;h2 id="exception--assertion"&gt;Exception &amp;amp; Assertion&lt;a class="anchor" href="#exception--assertion"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Avoid bad practices in Python exception handling.&lt;/li&gt;
&lt;li&gt;Always specify an exception type with except, but don&amp;rsquo;t be too general.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t Use Assertions for checking arguments&lt;/li&gt;
&lt;li&gt;EXamples
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;lookup exception&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;lookups&lt;/span&gt;&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;try&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; item &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; s&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;except&lt;/span&gt; LookupError&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Handled IndexError&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; d &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;dict&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;65&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;66&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; c&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;67&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;try&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; d&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;x&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;except&lt;/span&gt; LookupError&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Handled KeyError&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#953800"&gt;__name__&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lookups&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## test result &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Handled IndexError&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Handled KeyError&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;unicode exception&lt;/p&gt;</description></item><item><title>F# Collections 3</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-7/</guid><description>&lt;h2 id="seq"&gt;Seq&lt;a class="anchor" href="#seq"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A sequence is a logical series of elements all of one type. Sequences are particularly useful when you have a large, ordered collection of data but do not necessarily expect to use all of the elements. Individual sequence elements are computed only as required, so a sequence can provide better performance than a list in situations in which not all the elements are used.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Sequence that has an increment.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// uses the -&amp;gt; operator, which allows you to specify an expression 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// whose value will become a part of the sequence. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// specify the do keyword, with an optional yield that follows:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The &amp;#39;yield&amp;#39; is implicit and doesn&amp;#39;t need to be specified in most cases.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The following code generates a list of coordinate pairs along with 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// an index into an array that represents the grid. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Note that the first for expression requires a do to be specified.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;height&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; width&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;10&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 10&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sequence&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; row &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; width &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; col &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; height &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;row&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; row&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;width &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; e &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; sequence &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; e
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (0, 0, 0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (0, 1, 1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (0, 2, 2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (0, 9, 9)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, 0, 10)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, 1, 11)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, 2, 12)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;9&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 9&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 99&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="yield-keyword"&gt;yield! keyword&lt;a class="anchor" href="#yield-keyword"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Repeats &amp;#39;1 2 3 4 5&amp;#39; ten times
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; &lt;span style="color:#0550ae"&gt;_&lt;/span&gt; &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 3&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 4&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 5&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// When yield! is used in an expression, all other single values 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// must use the yield keyword:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Combine repeated values with their values
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;x &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; i&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Prime number
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Recursive isprime function.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;isprime&lt;/span&gt; n &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rec&lt;/span&gt; check i &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; n&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;2 &lt;span style="color:#0550ae"&gt;||&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;n &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;&amp;lt;&amp;gt;&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; check &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; check 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;aSequence&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; n &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;100 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; isprime n &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; aSequence &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d&amp;#34;&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 1 2 3 5 7 ...47 53 ... 89 97
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Following example creates a multiplication table that consists of 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// tuples of three elements, each consisting of two factors and the product
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;multiplicationTable&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;9 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; j &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;9 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; j&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; i&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;j&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Yield the values of a binary tree in a sequence.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Tree&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Tree &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; &lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;a &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; Tree&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; Tree&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;a&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Leaf &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; &lt;span style="color:#cf222e"&gt;&amp;#39;&lt;/span&gt;a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// inorder : Tree&amp;lt;&amp;#39;a&amp;gt; -&amp;gt; seq&amp;lt;&amp;#39;a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rec&lt;/span&gt; inorder tree &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; tree &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Tree&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;x&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; left&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; right&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt; inorder left
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt; inorder right
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Leaf x &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;yield&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;mytree&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Tree&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;6&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; Tree&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; Leaf&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;),&lt;/span&gt; Leaf&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;3&lt;span style="color:#0550ae"&gt;)),&lt;/span&gt; Leaf&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;9&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seq1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; inorder mytree
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; seq1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// outut 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 3&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 6&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;...]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="functions"&gt;Functions&lt;a class="anchor" href="#functions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Using Seq.empty, or you can create a sequence of just one 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// specified element by using Seq.singleton.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqEmpty&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;empty
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqOne&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;singleton 10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; seqOne
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output: seq [10]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use Seq.init to create a sequence for which the elements are created 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// by using a function that you provide. You also provide a size for 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the sequence. This function is just like List.init, except that the 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// elements are not created until you iterate through the sequence.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqFirst5MultiplesOf10&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;init 5 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; n &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; n &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; 10&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;iter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printf &lt;span style="color:#0a3069"&gt;&amp;#34;%d &amp;#34;&lt;/span&gt; elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seqFirst5MultiplesOf10
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The output is
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 0 10 20 30 40
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Convert an array to a sequence by using a cast.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqFromArray1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;:&amp;gt;&lt;/span&gt; seq&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Convert an array to a sequence by using Seq.ofArray.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqFromArray2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;|]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;ofArray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// using Seq.cast, you can create a sequence from a weakly typed 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// collection, such as those defined in System.Collections. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;open&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;arr&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; ResizeArray&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;int&lt;span style="color:#0550ae"&gt;&amp;gt;(&lt;/span&gt;10&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arr&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Add&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;10&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqCast&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;cast arr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.unfold generates a sequence from a computation function that takes 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// a state and transforms it to produce each subsequent element in the sequence
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seq1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 0 &lt;span style="color:#57606a"&gt;// Initial state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;unfold &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; state &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;state &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; 20&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;state&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;The sequence seq1 contains numbers from 0 to 20.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; seq1 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf &lt;span style="color:#0a3069"&gt;&amp;#34;%d &amp;#34;&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The sequence seq1 contains numbers from 0 to 20.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;fib&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;// Initial state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;unfold &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; state &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;snd state &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; 1000&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;fst state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; snd state&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;snd state&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; fst state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; snd state&lt;span style="color:#0550ae"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\n&lt;/span&gt;&lt;span style="color:#0a3069"&gt;The sequence fib contains Fibonacci numbers.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; fib &lt;span style="color:#cf222e"&gt;do&lt;/span&gt; printf &lt;span style="color:#0a3069"&gt;&amp;#34;%d &amp;#34;&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The sequence fib contains Fibonacci numbers.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// generateInfiniteSequence generates sequences of floating point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// numbers. The sequences generated are computed from the fDenominator
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// function, which has the type (int -&amp;gt; float) and computes the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// denominator of each term in the sequence from the index of that
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// term. The isAlternating parameter is true if the sequence has
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// alternating signs.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;generateInfiniteSequence&lt;/span&gt; fDenominator isAlternating &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;isAlternating&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;initInfinite &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0 &lt;span style="color:#0550ae"&gt;/(&lt;/span&gt;fDenominator index&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0 &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;initInfinite &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0 &lt;span style="color:#0550ae"&gt;/(&lt;/span&gt;fDenominator index&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The harmonic alternating series is like the harmonic series
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// except that it has alternating signs.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;harmonicAlternatingSeries&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; generateInfiniteSequence &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt; index&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// This is the series of reciprocals of the odd numbers.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;oddNumberSeries&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; generateInfiniteSequence &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;2 &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;))&lt;/span&gt; &lt;span style="color:#cf222e"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// This is the series of recipocals of the squares.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;squaresSeries&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; generateInfiniteSequence &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; index&lt;span style="color:#0550ae"&gt;))&lt;/span&gt; &lt;span style="color:#cf222e"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// This function sums a sequence, up to the specified number of terms.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sumSeq&lt;/span&gt; length sequence &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;unfold &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; state &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;subtotal&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; snd state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;item &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;fst state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; sequence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;fst state &lt;span style="color:#0550ae"&gt;&amp;gt;=&lt;/span&gt; length&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Some&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;subtotal&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;fst state &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; subtotal&lt;span style="color:#0550ae"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// This function sums an infinite sequence up to a given value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// for the difference (epsilon) between subsequent terms,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// up to a maximum number of terms, whichever is reached first.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;infiniteSum&lt;/span&gt; infiniteSeq epsilon maxIteration &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; infiniteSeq
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; sumSeq maxIteration
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;pairwise
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;takeWhile &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; abs &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;snd elem &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; fst elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; epsilon&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;List&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;ofSeq
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;List&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;rev
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;List&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;head
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; snd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Compute the sums for three sequences that converge, and compare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the sums to the expected theoretical values.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;result1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; infiniteSum harmonicAlternatingSeries 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;00001 100000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Result: %f ln2: %f&amp;#34;&lt;/span&gt; result1 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;log 2&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Result: 0.693152 ln2: 0.693147
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;pi&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Math&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;PI
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;result2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; infiniteSum oddNumberSeries 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;00001 10000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Result: %f pi/4: %f&amp;#34;&lt;/span&gt; result2 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;pi&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;4&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Result: 0.785373 pi/4: 0.785398
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Because this is not an alternating series, a much smaller epsilon
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// value and more terms are needed to obtain an accurate result.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;result3&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; infiniteSum squaresSeries 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0000001 1000000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Result: %f pi*pi/6: %f&amp;#34;&lt;/span&gt; result3 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;pi&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;pi&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;6&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Result&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;644618 pi&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;pi&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;6&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;644934&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="transforming"&gt;Transforming&lt;a class="anchor" href="#transforming"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.pairwise creates a new sequence in which successive elements of the input
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// sequence are grouped into tuples.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printSeq&lt;/span&gt; seq1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;iter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;printf &lt;span style="color:#0a3069"&gt;&amp;#34;%A &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seq1&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqPairwise&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;pairwise &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; i&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqPairwise
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, 4) (4, 9) (9, 16) (16, 25) (25, 36) (36, 49) (49, 64) (64, 81) (81, 100) 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqDelta&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;map &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; snd elem &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; fst elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seqPairwise
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqDelta
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 3 5 7 9 11 13 15 17 19 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.windowed is like Seq.pairwise, except that instead of producing a 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// sequence of tuples, it produces a sequence of arrays that contain copies 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// of adjacent elements (a window) from the sequence. You specify the number 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// of adjacent elements you want in each array.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqNumbers&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;5&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;5&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;;&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;5 &lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;:&amp;gt;&lt;/span&gt; seq&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;float&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqWindows&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;windowed 3 seqNumbers
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqMovingAverage&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;map &lt;span style="color:#24292e"&gt;Array&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;average seqWindows
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Initial sequence: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqNumbers
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 1.0 1.5 2.0 1.5 1.0 1.5 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\n&lt;/span&gt;&lt;span style="color:#0a3069"&gt;Windows of length 3: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqWindows
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [|1.0; 1.5; 2.0|] [|1.5; 2.0; 1.5|] [|2.0; 1.5; 1.0|] [|1.5; 1.0; 1.5|] 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\n&lt;/span&gt;&lt;span style="color:#0a3069"&gt;Moving average: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqMovingAverage
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;5 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;666666667 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;5 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;333333333 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="sorting-comparing--grouping"&gt;Sorting, Comparing &amp;amp; Grouping&lt;a class="anchor" href="#sorting-comparing--grouping"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.compareWith function. The function compares successive elements in 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// turn, and stops when it encounters the first unequal pair. Any additional 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// elements do not contribute to the comparison.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sequence1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sequence2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Compare two sequences element by element.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;compareSequences&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;compareWith &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem1 elem2 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; elem1 &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; elem2 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;elif&lt;/span&gt; elem1 &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; elem2 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;compareResult1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; compareSequences sequence1 sequence2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;match&lt;/span&gt; compareResult1 &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Sequence1 is greater than sequence2.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;1 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Sequence1 is less than sequence2.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&lt;/span&gt; 0 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Sequence1 is equal to sequence2.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;_&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; failwith&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Invalid comparison result.&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// val compareResult1: int = -1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.countBy takes a function that generates a value called a key for 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// each element. A key is generated for each element by calling this function 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// on each element. Seq.countBy then returns a sequence that contains the key 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// values, and a count of the number of elements that generated each value of 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// the key.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;mySeq1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printSeq&lt;/span&gt; seq1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;iter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;printf &lt;span style="color:#0a3069"&gt;&amp;#34;%A &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seq1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqResult&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mySeq1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;countBy &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;elif&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqResult
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, 34) (2, 33) (0, 33)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.groupBy takes a sequence and a function that generates a key from an 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// element. The function is executed on each element of the sequence. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.groupBy returns a sequence of tuples, where the first element of each 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// tuple is the key and the second is a sequence of elements that produce 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// that key.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sequence&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; seq &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 100 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printSeq&lt;/span&gt; seq1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;iter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;printf &lt;span style="color:#0a3069"&gt;&amp;#34;%A &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seq1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;sequences3&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sequences
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;groupBy &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; index &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;elif&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 3 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sequences3 &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; printSeq
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// (1, seq [1; 4; 7; 10; ...]) (2, seq [2; 5; 8; 11; ...]) (0, seq [3; 6; 9; 12; ...])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Seq.distinct. Or Seq.distinctBy, which takes a key-generating function to 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// be called on each element. The resulting sequence contains elements of the 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// original sequence that have unique keys; later elements that produce a 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// duplicate key to an earlier element are discarded.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;binary&lt;/span&gt; n &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;rec&lt;/span&gt; generateBinary n &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;n &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;n&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;n &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;::&lt;/span&gt; generateBinary &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;n &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; 2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; generateBinary n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;List&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;rev
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;ofList
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;binary 1024&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// [1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;resultSequence&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;distinct &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;binary 1024&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt; resultSequence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// seq [1; 0]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;inputSequence&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;5 &lt;span style="color:#0550ae"&gt;..&lt;/span&gt; 10 &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printSeq&lt;/span&gt; seq1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;iter &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;printf &lt;span style="color:#0a3069"&gt;&amp;#34;%A &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; seq1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Original sequence: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq inputSequence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printf &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printfn &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\n&lt;/span&gt;&lt;span style="color:#0a3069"&gt;Sequence with distinct absolute values: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;seqDistinctAbsoluteValue&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#24292e"&gt;Seq&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;distinctBy &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;fun&lt;/span&gt; elem &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; abs elem&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; inputSequence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printSeq seqDistinctAbsoluteValue
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;5 &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;4 &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;3 &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;2 &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;1 0 6 7 8 9 10 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="slice"&gt;Slice&lt;a class="anchor" href="#slice"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In F#, a slice is a subset of any data type. Slices are similar to indexers, but instead of yielding a single value from the underlying data structure, they yield multiple ones. Slices use the .. operator syntax to select the range of specified indices in a data type.&lt;/p&gt;</description></item><item><title>Goroutine &amp; Channel - 2</title><link>https://harryho.github.io/coding/golang/go-note-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-7/</guid><description>&lt;h3 id="channel-directionality"&gt;Channel directionality&lt;a class="anchor" href="#channel-directionality"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A channel type may be annotated to specify that it may only send or only receive&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; var send_only chan&amp;lt;- int // channel can only receive data
 var recv_only &amp;lt;-chan int // channel can only send data
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Receive-only channels ( &amp;lt;-chan T ) cannot be closed, because closing a channel is intended as a way for a sender to signal that no more values will be sent to the channel, so it has no meaning for receive-only channels.&lt;/p&gt;</description></item><item><title>Context</title><link>https://harryho.github.io/coding/python/python-note-8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-8/</guid><description>&lt;h2 id="context-managers"&gt;Context managers&lt;a class="anchor" href="#context-managers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="context-manager"&gt;context manager&lt;a class="anchor" href="#context-manager"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;context manager an object designed to be used in a with-statement&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;begin&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;end&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; setup&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; teardown&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;begin&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;end&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; allocation&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; deallocation&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;with&lt;/span&gt; context&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;manager&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; enter&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; body
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exit&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A context-manager ensures that resources are properly and automatically managed&lt;/p&gt;</description></item><item><title>F# Pattern Matching</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-8/</guid><description>&lt;h2 id="pattern"&gt;Pattern&lt;a class="anchor" href="#pattern"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Patterns are rules for transforming input data. They are used throughout F# to compare data with a logical structure or structures, decompose data into constituent parts, or extract information from data in various ways.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Constant pattern&lt;/td&gt;
					&lt;td&gt;Any numeric, character, or string literal, an enumeration constant, or a defined literal identifier&lt;/td&gt;
					&lt;td&gt;1.0, &amp;ldquo;test&amp;rdquo;, 30, Color.Red&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Identifier pattern&lt;/td&gt;
					&lt;td&gt;A case value of a discriminated union, an exception label, or an active pattern case&lt;/td&gt;
					&lt;td&gt;Some(x) Failure(msg)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Variable pattern&lt;/td&gt;
					&lt;td&gt;identifier&lt;/td&gt;
					&lt;td&gt;a&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;as pattern&lt;/td&gt;
					&lt;td&gt;pattern as identifier&lt;/td&gt;
					&lt;td&gt;(a, b) as tuple1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;OR pattern&lt;/td&gt;
					&lt;td&gt;pattern1&lt;/td&gt;
					&lt;td&gt;pattern2&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AND pattern&lt;/td&gt;
					&lt;td&gt;pattern1 &amp;amp; pattern2&lt;/td&gt;
					&lt;td&gt;(a, b) &amp;amp; (_, &amp;ldquo;test&amp;rdquo;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cons pattern&lt;/td&gt;
					&lt;td&gt;identifier :: list-identifier&lt;/td&gt;
					&lt;td&gt;h :: t&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;List pattern&lt;/td&gt;
					&lt;td&gt;[ pattern_1; &amp;hellip; ; pattern_n ]&lt;/td&gt;
					&lt;td&gt;[ a; b; c ]&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Array pattern&lt;/td&gt;
					&lt;td&gt;[&lt;/td&gt;
					&lt;td&gt;pattern_1; ..; pattern_n&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Parenthesized pattern&lt;/td&gt;
					&lt;td&gt;( pattern )&lt;/td&gt;
					&lt;td&gt;( a )&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Tuple pattern&lt;/td&gt;
					&lt;td&gt;( pattern_1, &amp;hellip; , pattern_n )&lt;/td&gt;
					&lt;td&gt;( a, b )&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Record pattern&lt;/td&gt;
					&lt;td&gt;{ identifier1 = pattern_1; &amp;hellip; ; identifier_n = pattern_n }&lt;/td&gt;
					&lt;td&gt;{ Name = name; }&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Wildcard pattern&lt;/td&gt;
					&lt;td&gt;_&lt;/td&gt;
					&lt;td&gt;_&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Pattern together with type annotation&lt;/td&gt;
					&lt;td&gt;pattern : type&lt;/td&gt;
					&lt;td&gt;a : int&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Type test pattern&lt;/td&gt;
					&lt;td&gt;:? type [ as identifier ]&lt;/td&gt;
					&lt;td&gt;:? System.DateTime as dt&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Null pattern&lt;/td&gt;
					&lt;td&gt;null&lt;/td&gt;
					&lt;td&gt;null&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Nameof pattern&lt;/td&gt;
					&lt;td&gt;nameof expr&lt;/td&gt;
					&lt;td&gt;nameof str&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="constant-patterns"&gt;Constant Patterns&lt;a class="anchor" href="#constant-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&amp;lt;&lt;/span&gt;Literal&lt;span style="color:#0550ae"&gt;&amp;gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;Three&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;filter123&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// The following line contains literal patterns combined with an OR pattern.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; 1 &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Three &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Found 1, 2, or 3!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// The following line contains a variable pattern.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; var1 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d&amp;#34;&lt;/span&gt; var1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;in&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;..&lt;/span&gt;10 &lt;span style="color:#cf222e"&gt;do&lt;/span&gt; filter123 x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found 1, 2, or 3!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found 1, 2, or 3!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Found 1, 2, or 3!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Color&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Red &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Green &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Blue &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printColorName&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;color&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;Color&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; color &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Red &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Red&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Green &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Green&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Blue &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Blue&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;_&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#6a737d"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printColorName &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Red
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printColorName &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Green
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printColorName &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Blue
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Green
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Blue&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="identifier-patterns"&gt;Identifier Patterns&lt;a class="anchor" href="#identifier-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printOption&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;data &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; int option&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; data &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Some var1 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d&amp;#34;&lt;/span&gt; var1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; None &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#6a737d"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt; &lt;span style="color:#1f2328"&gt;PersonName&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; FirstOnly &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; &lt;span style="color:#cf222e"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; LastOnly &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; &lt;span style="color:#cf222e"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; FirstLast &lt;span style="color:#cf222e"&gt;of&lt;/span&gt; &lt;span style="color:#cf222e"&gt;string&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; &lt;span style="color:#cf222e"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;constructQuery&lt;/span&gt; personName &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; personName &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; FirstOnly&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;firstName&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;May I call you %s?&amp;#34;&lt;/span&gt; firstName
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; LastOnly&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;lastName&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Are you Mr. or Ms. %s?&amp;#34;&lt;/span&gt; lastName
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; FirstLast&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;firstName&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; lastName&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;Are you %s %s?&amp;#34;&lt;/span&gt; firstName lastName
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;constructQuery &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;FirstOnly&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;john&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;constructQuery &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;LastOnly&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;smith&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;constructQuery &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;FirstLast&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;john&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;smith&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// May I call you john?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Are you Mr. or Ms. smith?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Are you john smith&lt;span style="color:#0550ae"&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="variable-patterns"&gt;Variable Patterns&lt;a class="anchor" href="#variable-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;function1&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; x &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;var1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; var2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;when&lt;/span&gt; var1 &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; var2 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d is greater than %d&amp;#34;&lt;/span&gt; var1 var2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;var1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; var2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;when&lt;/span&gt; var1 &lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt; var2 &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d is less than %d&amp;#34;&lt;/span&gt; var1 var2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;var1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; var2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d equals %d&amp;#34;&lt;/span&gt; var1 var2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;function1 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;function1 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;2&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;function1 &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 1 is less than 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 2 is greater than 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; 0 equals 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="as-pattern"&gt;as Pattern&lt;a class="anchor" href="#as-pattern"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;as&lt;/code&gt; pattern is a pattern that has an as clause appended to it.&lt;/p&gt;</description></item><item><title>Packaging</title><link>https://harryho.github.io/coding/golang/go-note-8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-8/</guid><description>&lt;h3 id="package"&gt;Package&lt;a class="anchor" href="#package"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Package is a way to structure code: a program is constructed as a “package” (often abbreviated as pkg), which may use facilities from other packages. Every go-file belongs to one (and only one) package (like a library or namespace in other languages). Many different .go files can belong to one package, so the filename(s) and package name are generally not the same.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The package to which the code-file belongs must be indicated on the first line, e.g.: package main . A standalone executable belongs to package main. Each Go application contains one package called main. An application can consist of different packages, but even if you use only package main, you don’t have to stuff all code in 1 big file: you can make a number of smaller files each having package main as 1 st codeline. If you compile a source file with a package name other than main, like pack1, the object file is stored in pack1.a; a package name is written in lowercase letters.&lt;/p&gt;</description></item><item><title>ABC</title><link>https://harryho.github.io/coding/python/python-note-9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/python/python-note-9/</guid><description>&lt;h2 id="abc---abstract-base-classes"&gt;ABC - Abstract Base Classes&lt;a class="anchor" href="#abc---abstract-base-classes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Abstract base classes complement duck-typing by providing a way to define interfaces when other techniques like hasattr() would be clumsy or subtly wrong (for example with magic methods). ABCs introduce virtual subclasses, which are classes that don’t inherit from a class but are still recognized by isinstance() and issubclass(); see the abc module documentation. Python comes with many built-in ABCs for data structures (in the collections module), numbers (in the numbers module), and streams (in the io module). You can create your own ABCs with the abc module.&lt;/p&gt;</description></item><item><title>F# Active Patterns</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-9/</guid><description>&lt;h2 id="active-patterns"&gt;Active Patterns&lt;a class="anchor" href="#active-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Active patterns enable you to define named partitions that subdivide input data, so that you can use these names in a pattern matching expression just as you would for a discriminated union. You can use active patterns to decompose data in a customized manner for each partition.&lt;/p&gt;
&lt;h3 id="syntax"&gt;Syntax&lt;a class="anchor" href="#syntax"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Active pattern of one choice.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;identifier&lt;span style="color:#0550ae"&gt;|)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;arguments&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; valueToMatch &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; expression
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Active Pattern with multiple choices.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Uses a FSharp.Core.Choice&amp;lt;_,...,_&amp;gt; based on the number of case names. In F#, the limitation n &amp;lt;= 7 applies.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;identifier1&lt;span style="color:#0550ae"&gt;|&lt;/span&gt;identifier2&lt;span style="color:#0550ae"&gt;|...|)&lt;/span&gt; valueToMatch &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; expression
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Partial active pattern definition.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Uses a FSharp.Core.option&amp;lt;_&amp;gt; to represent if the type is satisfied at the call site.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;identifier&lt;span style="color:#0550ae"&gt;|_|)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;arguments&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; valueToMatch &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; expression&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Multiple choices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;Even&lt;span style="color:#0550ae"&gt;|&lt;/span&gt;Odd&lt;span style="color:#0550ae"&gt;|)&lt;/span&gt; input &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; input &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; 2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; 0 &lt;span style="color:#cf222e"&gt;then&lt;/span&gt; Even &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; Odd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;TestNumber&lt;/span&gt; input &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; input &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Even &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d is even&amp;#34;&lt;/span&gt; input
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; Odd &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%d is odd&amp;#34;&lt;/span&gt; input
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TestNumber 7
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TestNumber 11
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TestNumber 32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 7 is odd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// 11 is odd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; 32 is even&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Decompose data types&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;open&lt;/span&gt; &lt;span style="color:#24292e"&gt;System.Drawing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;RGB&lt;span style="color:#0550ae"&gt;|)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;col &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Drawing&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Color&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;R&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;G&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;B &lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(|&lt;/span&gt;HSB&lt;span style="color:#0550ae"&gt;|)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;col &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Drawing&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Color&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetHue&lt;span style="color:#6a737d"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetSaturation&lt;span style="color:#6a737d"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; col&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;GetBrightness&lt;span style="color:#6a737d"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printRGB&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;col&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Drawing&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Color&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; col &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; RGB&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;r&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; g&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34; Red: %d Green: %d Blue: %d&amp;#34;&lt;/span&gt; r g b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printHSB&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;col&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#24292e"&gt;System&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#24292e"&gt;Drawing&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Color&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;match&lt;/span&gt; col &lt;span style="color:#cf222e"&gt;with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; HSB&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;h&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; s&lt;span style="color:#0550ae"&gt;,&lt;/span&gt; b&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34; Hue: %f Saturation: %f Brightness: %f&amp;#34;&lt;/span&gt; h s b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#953800"&gt;printAll&lt;/span&gt; col colorString &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printfn &lt;span style="color:#0a3069"&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; colorString
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printRGB col
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printHSB col
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printAll &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Red &lt;span style="color:#0a3069"&gt;&amp;#34;Red&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printAll &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Black &lt;span style="color:#0a3069"&gt;&amp;#34;Black&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printAll &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;White &lt;span style="color:#0a3069"&gt;&amp;#34;White&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printAll &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Gray &lt;span style="color:#0a3069"&gt;&amp;#34;Gray&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printAll &lt;span style="color:#24292e"&gt;Color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;BlanchedAlmond &lt;span style="color:#0a3069"&gt;&amp;#34;BlanchedAlmond&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red: 255 Green: 0 Blue: 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Hue: 360.000000 Saturation: 1.000000 Brightness: 0.500000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Black
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red: 0 Green: 0 Blue: 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Hue: 0.000000 Saturation: 0.000000 Brightness: 0.000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// White
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red: 255 Green: 255 Blue: 255
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Hue: 0.000000 Saturation: 0.000000 Brightness: 1.000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Gray
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red: 128 Green: 128 Blue: 128
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Hue: 0.000000 Saturation: 0.000000 Brightness: 0.501961
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// BlanchedAlmond
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Red: 255 Green: 235 Blue: 205
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;//&lt;/span&gt; Hue&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; 36&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;000000 Saturation&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; 1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;000000 Brightness&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; 0&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;901961&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="partial-active-patterns"&gt;Partial Active Patterns&lt;a class="anchor" href="#partial-active-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Active patterns that do not always produce a value are called partial active patterns; they have a return value that is an option type. To define a partial active pattern, you use a wildcard character (_) at the end of the list of patterns inside the banana clips.&lt;/p&gt;</description></item><item><title>Pitfalls</title><link>https://harryho.github.io/coding/golang/go-note-9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-9/</guid><description>&lt;h3 id="shadowing"&gt;Shadowing&lt;a class="anchor" href="#shadowing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hiding (shadowing) a variable by misusing short declaration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Such mistakes occur mostly inside the if-body or for-loop&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;var&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;remember&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;bool&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;false&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;something&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;remember&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;true&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Wrong.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// use remember&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;shadow&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;x&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;check1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// x is created; err is assigned to&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// err correctly returned&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;y&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;check2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;x&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// y and inner err are created&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// inner err shadows outer err so nil is wrongly returned!&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;else&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;y&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="misusing-strings"&gt;Misusing strings&lt;a class="anchor" href="#misusing-strings"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;String concatenations of the kind a += b are inefficient, especially when performed inside a loop.&lt;/p&gt;</description></item><item><title>Windows cmd &amp; hotkey - 1</title><link>https://harryho.github.io/hacks/windows-command-1/</link><pubDate>Wed, 09 Mar 2011 10:59:31 +1100</pubDate><guid>https://harryho.github.io/hacks/windows-command-1/</guid><description>&lt;p&gt;&lt;em&gt;Do you want to make your friends amazed by your computer skill and praise you as genius? Or the hacker as watched in Sci-Fi movies? You don&amp;rsquo;t need Mac, Linux or other operating systems, just Windows, you can show-off and look like hacker and master of Zeroes and Ones, even you have no any idea of it. Here are some tricks by which you can make your friends&amp;rsquo; jaw drop.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>C# Console App</title><link>https://harryho.github.io/coding/c-sharp/csharp-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c-sharp/csharp-note-1/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;C# is an elegant and type-safe object-oriented language that enables developers to build a variety of secure and robust applications that run on the .NET Framework. C# syntax is highly expressive, yet it is also simple and easy to learn. The curly-brace syntax of C# will be instantly recognizable to anyone familiar with C, C++ or Java.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Here I am going to demonstrate how to create simple .net project without Visual Studio&lt;/p&gt;</description></item><item><title>F# Computations 1</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-10/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-10/</guid><description>&lt;h2 id="computation-expressions"&gt;Computation expressions&lt;a class="anchor" href="#computation-expressions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Computation expressions in F# provide a convenient syntax for writing computations that can be sequenced and combined using control flow constructs and bindings. Depending on the kind of computation expression, they can be thought of as a way to express monads, monoids, monad transformers, and applicative functors. However, unlike other languages (such as do-notation in Haskell), they are not tied to a single abstraction, and do not rely on macros or other forms of metaprogramming to accomplish a convenient and context-sensitive syntax.&lt;/p&gt;</description></item><item><title>Template</title><link>https://harryho.github.io/coding/golang/go-note-10/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-10/</guid><description>&lt;h3 id="template"&gt;Template&lt;a class="anchor" href="#template"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Package template implements data-driven templates for generating textual output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Templates are executed by applying them to a data structure. Annotations in the template refer to elements of the data structure (typically a field of a struct or a key in a map) to control execution and derive values to be displayed. Execution of the template walks the structure and sets the cursor, represented by a period &amp;lsquo;.&amp;rsquo; and called &amp;ldquo;dot&amp;rdquo;, to the value at the current location in the structure as execution proceeds.&lt;/p&gt;</description></item><item><title>Windows cmd &amp; hotkey - 2</title><link>https://harryho.github.io/hacks/windows-command-2/</link><pubDate>Sat, 24 Mar 2012 10:59:31 +1100</pubDate><guid>https://harryho.github.io/hacks/windows-command-2/</guid><description>&lt;p&gt;&lt;em&gt;This article will continue the topic of Windows command &amp;amp; hotkeys. Part-1 shows you common hotkeys and short command lines for &lt;code&gt;Run&lt;/code&gt; windnow dialog. The rest of this topic will focus on the advanced commands and how to create a batch script with all those commands.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Let me clarify something first. Advanced command here does not mean that commands here are very complicated or much more powerful than common ones, which have been shown in the Part-1. Here we call them advanced, because they are used by experienced users to complete their given tasks, and those commands are used seldom by majority people. Comparing with Part-1, advanced commands have some specific features which allow them to do some special jobs, which usually are done by system admin. Advanced command is known as Admin command as well.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>AWS: EKS - 1</title><link>https://harryho.github.io/cloud/aws/aws-11-eks-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-11-eks-1/</guid><description>&lt;h2 id="eks---part-1"&gt;EKS - Part 1&lt;a class="anchor" href="#eks---part-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Elastic Kubernetes Service (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to stand up or maintain your own Kubernetes control plane. Kubernetes is an open-source system for automating the deployment, scaling, and management of containerized applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EKS runs Kubernetes control plane instances across multiple Availability Zones to ensure high availability.&lt;/li&gt;
&lt;li&gt;EKS automatically detects and replaces unhealthy control plane instances.&lt;/li&gt;
&lt;li&gt;EKS provides automated version upgrades and patching for them.&lt;/li&gt;
&lt;li&gt;EKS is also integrated with many AWS services to provide scalability and security.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="eksctl"&gt;eksctl&lt;a class="anchor" href="#eksctl"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install the Latest AWS CLI&lt;/p&gt;</description></item><item><title>F# Computations 2</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-11/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-11/</guid><description>&lt;h2 id="map"&gt;Map&lt;a class="anchor" href="#map"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Common Names: map, fmap, lift, Select&lt;/p&gt;
&lt;p&gt;Common Operators: &lt;code&gt;&amp;lt;$&amp;gt; &amp;lt;!&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What it does: Lifts a function into the elevated world&lt;/p&gt;
&lt;p&gt;Signature: &lt;code&gt;(a-&amp;gt;b) -&amp;gt; E&amp;lt;a&amp;gt; -&amp;gt; E&amp;lt;b&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Alternatively with the parameters reversed: &lt;code&gt;E&amp;lt;a&amp;gt; -&amp;gt; (a-&amp;gt;b) -&amp;gt; E&amp;lt;b&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Description
“map” is the generic name for something that takes a function in the normal world and transforms it into a corresponding function in the elevated world.&lt;/p&gt;
&lt;p&gt;An alternative interpretation of map is that it is a two parameter function that takes an elevated value &lt;code&gt;E&amp;lt;a&amp;gt;&lt;/code&gt; and a normal function &lt;code&gt;a-&amp;gt;b&lt;/code&gt;, and returns a new elevated value &lt;code&gt;E&amp;lt;b&amp;gt;&lt;/code&gt; generated by applying the function a-&amp;gt;b to the internal elements of &lt;code&gt;E&amp;lt;a&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>AWS: EKS - 2</title><link>https://harryho.github.io/cloud/aws/aws-11-eks-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-11-eks-2/</guid><description>&lt;h2 id="eks---part-2"&gt;EKS - Part 2&lt;a class="anchor" href="#eks---part-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The update process consists of Amazon EKS launching new API server nodes with the updated Kubernetes version to replace the existing ones. Amazon EKS performs standard infrastructure and readiness health checks for network traffic on these new nodes to verify that they are working as expected. If any of these checks fail, Amazon EKS reverts the infrastructure deployment, and your cluster remains on the prior Kubernetes version. Running applications are not affected, and your cluster is never left in a non-deterministic or unrecoverable state. Amazon EKS regularly backs up all managed clusters, and mechanisms exist to recover clusters if necessary. We are constantly evaluating and improving our Kubernetes infrastructure management processes.&lt;/p&gt;</description></item><item><title>F# Async</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-12/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-12/</guid><description>&lt;h2 id="async-expressions"&gt;Async expressions&lt;a class="anchor" href="#async-expressions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Async expressions provide one way of performing computations asynchronously, that is, without blocking execution of other work.&lt;/p&gt;
&lt;h3 id="asynchronous-binding-by-using-let"&gt;Asynchronous Binding by Using let!&lt;a class="anchor" href="#asynchronous-binding-by-using-let"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The effect of let! is to enable execution to continue on other computations or threads as the computation is being performed. After the right side of the let! binding returns, the rest of the async expression resumes execution.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// let just stores the result as an asynchronous operation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;result1 &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; Async&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;byte&lt;/span&gt;&lt;span style="color:#6a737d"&gt;[]&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; stream&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;AsyncRead&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;bufferSize&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// let! completes the asynchronous operation and returns the data.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;let&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;result2 &lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;byte&lt;/span&gt;&lt;span style="color:#6a737d"&gt;[]&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; stream&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;AsyncRead&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;bufferSize&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;let!&lt;/code&gt; can only be used to await F# async computations &lt;code&gt;Async&amp;lt;T&amp;gt;&lt;/code&gt; directly. You can await other kinds of asynchronous operations indirectly:&lt;/p&gt;</description></item><item><title>Windows cmd &amp; hotkey - 3</title><link>https://harryho.github.io/hacks/windows-command-3/</link><pubDate>Sun, 04 May 2014 10:59:31 +1100</pubDate><guid>https://harryho.github.io/hacks/windows-command-3/</guid><description>&lt;p&gt;&lt;em&gt;This article will continue the topic of Windows command &amp;amp; hotkeys. &lt;a href="https://harryho.github.io/hacks/windows-command-1"&gt;Part-1&lt;/a&gt; shows you common hotkeys and short command lines for &lt;code&gt;Run&lt;/code&gt; window dialog. &lt;a href="https://harryho.github.io/hacks/windows-command-2"&gt;Part-2&lt;/a&gt; advanced commands and how to create a batch script with all those commands. Here I am going to show you another secret weapon in Windows system-VBScript/JScript&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="breif-history"&gt;Breif history&lt;a class="anchor" href="#breif-history"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;VBScript/JScript is an Active Scripting language developed by Microsoft that is modeled on Visual Basic. It allows Microsoft Windows system administrators to generate powerful tools for managing computers with error handling, subroutines, and other advanced programming constructs.&lt;/p&gt;</description></item><item><title>AWS: EKS - 3</title><link>https://harryho.github.io/cloud/aws/aws-11-eks-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-11-eks-3/</guid><description>&lt;h2 id="eks---part-3"&gt;EKS - Part 3&lt;a class="anchor" href="#eks---part-3"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="cluster-autoscaler"&gt;Cluster Autoscaler&lt;a class="anchor" href="#cluster-autoscaler"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Kubernetes Cluster Autoscaler automatically adjusts the number of nodes in your cluster when pods fail to launch due to lack of resources or when nodes in the cluster are underutilized and their pods can be rescheduled onto other nodes in the cluster.&lt;/p&gt;
&lt;h3 id="strategy-of-auto-----scaling"&gt;Strategy of auto scaling&lt;a class="anchor" href="#strategy-of-auto-----scaling"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Stateful application&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running a stateful application across multiple Availability Zones that is backed by Amazon EBS volumes and using the Kubernetes Cluster Autoscaler, you should configure multiple node groups, each scoped to a single Availability Zone.&lt;/p&gt;</description></item><item><title>F# Task</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-13/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-13/</guid><description>&lt;h2 id="tasks-expressions"&gt;Tasks expressions&lt;a class="anchor" href="#tasks-expressions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Asynchronous code is normally authored using async expressions. Using task expressions is preferred when interoperating extensively with .NET libraries that create or consume .NET tasks. Task expressions can also improve performance and the debugging experience. However, task expressions come with some limitations.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;task { expression }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The task is started immediately after this code is executed and runs on the current thread until its first asynchronous operation is performed (for example, an asynchronous sleep, asynchronous I/O, or other primitive asynchronous operation). The type of the expression is &lt;code&gt;Task&amp;lt;'T&amp;gt;&lt;/code&gt;, where &lt;code&gt;'T&lt;/code&gt; is the type returned by the expression when the return keyword is used.&lt;/p&gt;</description></item><item><title>AWS: EKS - 4</title><link>https://harryho.github.io/cloud/aws/aws-11-eks-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-11-eks-4/</guid><description>&lt;h2 id="eks---part-4"&gt;EKS - Part 4&lt;a class="anchor" href="#eks---part-4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="vpc-tagging"&gt;VPC Tagging&lt;a class="anchor" href="#vpc-tagging"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Key: The &lt;cluster-name&gt; value matches your Amazon EKS cluster&amp;rsquo;s name.&lt;/li&gt;
&lt;li&gt;Value: The shared value allows more than one cluster to use this VPC.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Key&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;kubernetes.io/cluster/&amp;lt;cluster-name&amp;gt;&lt;/td&gt;
					&lt;td&gt;shared&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="load-balancing"&gt;Load Balancing&lt;a class="anchor" href="#load-balancing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Amazon EKS supports the Network Load Balancer and the Classic Load Balancer for pods running on Amazon EC2 instance worker nodes through the Kubernetes service of type LoadBalancer. Classic Load Balancers and Network Load Balancers are not supported for pods running on AWS Fargate (Fargate).&lt;/p&gt;</description></item><item><title>F# Lazy</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-14/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-14/</guid><description>&lt;h2 id="lazy-expressions"&gt;Lazy Expressions&lt;a class="anchor" href="#lazy-expressions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lazy expressions are expressions that are not evaluated immediately, but are instead evaluated when the result is needed. This can help to improve the performance of your code.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;let identifier = lazy ( expression )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Lazy expressions enable you to improve performance by restricting the execution of an expression to only those situations in which a result is needed.&lt;/p&gt;
&lt;p&gt;To force the expressions to be performed, you call the method Force. Force causes the execution to be performed only one time. Subsequent calls to Force return the same result, but do not execute any code.&lt;/p&gt;</description></item><item><title>AWS: EKS - 5</title><link>https://harryho.github.io/cloud/aws/aws-11-eks-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-11-eks-5/</guid><description>&lt;h2 id="eks---part-5"&gt;EKS - Part 5&lt;a class="anchor" href="#eks---part-5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="metrics-server"&gt;Metrics Server&lt;a class="anchor" href="#metrics-server"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Kubernetes metrics server is an aggregator of resource usage data in your cluster, and it is not deployed by default in Amazon EKS clusters. The metrics server is commonly used by other Kubernetes add ons, such as the Horizontal Pod Autoscaler or the Kubernetes Dashboard.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Deploy the metrics server&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the metrics-server deployment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl get deployment metrics-server -n kube-system
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="prometheus"&gt;Prometheus&lt;a class="anchor" href="#prometheus"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Kubernetes API server exposes a number of metrics that are useful for monitoring and analysis. These metrics are exposed internally through a metrics endpoint that refers to the /metrics HTTP API. Like other endpoints, this endpoint is exposed on the Amazon EKS control plane.&lt;/p&gt;</description></item><item><title>AWS: RDS - 1</title><link>https://harryho.github.io/cloud/aws/aws-21-rds-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/cloud/aws/aws-21-rds-1/</guid><description>&lt;h2 id="rds"&gt;RDS&lt;a class="anchor" href="#rds"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Relational Database Service (Amazon RDS) makes it easy to set up, operate, and scale a relational database in the cloud. It provides cost-efficient and resizable capacity while automating time-consuming administration tasks such as hardware provisioning, database setup, patching and backups.&lt;/p&gt;
&lt;h3 id="backup--restore-sql-server"&gt;Backup &amp;amp; Restore SQL Server&lt;a class="anchor" href="#backup--restore-sql-server"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="backup-database-to-s3"&gt;Backup database to S3&lt;a class="anchor" href="#backup-database-to-s3"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Assumption&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DB name: sample_db&lt;/li&gt;
&lt;li&gt;S3 bucket name: sql-server-backup&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Backup with built-in stored proc&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; exec msdb.dbo.rds_backup_database 
 @source_db_name='sample_db', 
 @s3_arn_to_backup_to='arn:aws:s3:::sql-server-backup/sample_db_20191221.bak', 
 @overwrite_S3_backup_file=1;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Track status&lt;/p&gt;</description></item><item><title>Good practice - 1</title><link>https://harryho.github.io/coding/golang/go-note-20/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-20/</guid><description>&lt;h3 id="strings"&gt;Strings&lt;a class="anchor" href="#strings"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="change-a-character"&gt;Change a character&lt;a class="anchor" href="#change-a-character"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to change a character in a string&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt;&lt;span style="color:#6639ba"&gt;byte&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;s&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]=&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;s2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;string&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// s2 == &amp;#34;cello&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="substring"&gt;Substring&lt;a class="anchor" href="#substring"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;How to take a part(substring) of a string str&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;substr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#1f2328"&gt;n&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#1f2328"&gt;m&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="for-loop"&gt;for-loop&lt;a class="anchor" href="#for-loop"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;How to loop over a string str with for or for-range:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// gives only the bytes:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;…&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#1f2328"&gt;i&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// gives the Unicode characters:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;ix&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;ch&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;range&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// …&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="bytes-of-str"&gt;bytes of str&lt;a class="anchor" href="#bytes-of-str"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Number of bytes in a string str&lt;/p&gt;</description></item><item><title>Good practice - 2</title><link>https://harryho.github.io/coding/golang/go-note-21/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-21/</guid><description>&lt;h3 id="goroutines-and-channels"&gt;Goroutines and channels&lt;a class="anchor" href="#goroutines-and-channels"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Performance advice:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;A rule of thumb if you use parallelism to gain efficiency over serial computation: the amount of work done inside goroutine has to be much higher than the costs associated with creating goroutines and sending data back and forth between them.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="using-buffered-channels"&gt;Using buffered channels&lt;a class="anchor" href="#using-buffered-channels"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Using buffered channels for performance:&lt;/p&gt;
&lt;p&gt;A buffered channel can easily double its throughput, depending on the context the performance gain can be 10x or more. You can further try to optimize by adjusting the capacity of the channel.&lt;/p&gt;</description></item><item><title>Good practice - 3</title><link>https://harryho.github.io/coding/golang/go-note-22/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-22/</guid><description>&lt;h3 id="error"&gt;Error&lt;a class="anchor" href="#error"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;How to stop a program when an error occurs:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Program stopping with error %v&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Exit&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// OR :&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;panic&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;ERROR occurred: &amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;())&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="performance-best-practices-and-advice"&gt;Performance best practices and advice&lt;a class="anchor" href="#performance-best-practices-and-advice"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Use the initializing declaration form := wherever possible (in functions).&lt;/li&gt;
&lt;li&gt;Use bytes if possible instead of strings&lt;/li&gt;
&lt;li&gt;Use slices instead of arrays.&lt;/li&gt;
&lt;li&gt;Use arrays or slices instead of a map where possible (see ref. 15)&lt;/li&gt;
&lt;li&gt;Use for range over a slice if you only need the value and not the index; this is slightly faster than having to do a slice lookup for every element.&lt;/li&gt;
&lt;li&gt;When the array is sparse (containing many 0 or nil-values), using a map can result in lower memory consumption.&lt;/li&gt;
&lt;li&gt;Specify an initial capacity for maps.&lt;/li&gt;
&lt;li&gt;When defining methods: use a pointer to a type (struct) as a receiver.&lt;/li&gt;
&lt;li&gt;Use constants or flags to extract constant values from the code.&lt;/li&gt;
&lt;li&gt;Use caching whenever possible when large amounts of memory are being allocated.&lt;/li&gt;
&lt;li&gt;Use template caching&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Golang snippets</title><link>https://harryho.github.io/coding/golang/go-note-99/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/golang/go-note-99/</guid><description>&lt;h3 id="convenient-logging-methods"&gt;Convenient logging methods&lt;a class="anchor" href="#convenient-logging-methods"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="stringer"&gt;Stringer&lt;a class="anchor" href="#stringer"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;package&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;main&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Animal has a Name and an Age to represent an animal.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Animal&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;struct&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;uint&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// String makes Animal satisfy the Stringer interface.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;a&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Animal&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;String&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Sprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;%v (%d)&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;a&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;a&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;a&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Animal&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Gopher&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;a&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Gopher (2)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="gostringer"&gt;GoStringer&lt;a class="anchor" href="#gostringer"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;package&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;main&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Address has a City, State and a Country.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Address&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;struct&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;City&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;State&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Country&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Person has a Name, Age and Address.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;type&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Person&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;struct&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;uint&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Address&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// GoString makes Person satisfy the GoStringer interface.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// The return value is valid Go code that can be used to reproduce the Person struct.&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Person&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;GoString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;string&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Sprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Person{Name: %q, Age: %d, Addr: &amp;amp;Address{City: %q, State: %q, Country: %q}}&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;City&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;State&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Country&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Sprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Person{Name: %q, Age: %d}&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;p&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p1&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Person&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Warren&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;31&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Addr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Address&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;City&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Denver&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;State&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;CO&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Country&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;U.S.A.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// If GoString() wasn&amp;#39;t implemented, the output of `fmt.Printf(&amp;#34;%#v&amp;#34;, p1)` would be similar to&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Person{Name:&amp;#34;Warren&amp;#34;, Age:0x1f, Addr:(*main.Address)(0x10448240)}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;%#v\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p2&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Person&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Theia&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;Age&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// If GoString() wasn&amp;#39;t implemented, the output of `fmt.Printf(&amp;#34;%#v&amp;#34;, p2)` would be similar to&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Person{Name:&amp;#34;Theia&amp;#34;, Age:0x4, Addr:(*main.Address)(nil)}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;%#v\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;p2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// ----- Output ------&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Person{Name: &amp;#34;Warren&amp;#34;, Age: 31, Addr: &amp;amp;Address{City: &amp;#34;Denver&amp;#34;, State: &amp;#34;CO&amp;#34;, Country: &amp;#34;U.S.A.&amp;#34;}}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;// Person{Name: &amp;#34;Theia&amp;#34;, Age: 4}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="file"&gt;File&lt;a class="anchor" href="#file"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="read-file"&gt;Read file&lt;a class="anchor" href="#read-file"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;file&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Open&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;input.dat&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;An error occurred on opening the input file\n&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Does the file exist?\n&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Have you got acces to it?\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;defer&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;file&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Close&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;iReader&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;bufio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;NewReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;file&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;iReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;ReadString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// error or EOF&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Printf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;The input was: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="read--write-with-sliced-buffer"&gt;Read &amp;amp; Write with sliced buffer&lt;a class="anchor" href="#read--write-with-sliced-buffer"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;cat&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;File&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;const&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;NBUF&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;512&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;var&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;buf&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#1f2328"&gt;NBUF&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#cf222e"&gt;byte&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;switch&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;er&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Read&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;buf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[:]);&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;true&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Fprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Stderr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cat: error reading from %s: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;er&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Exit&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// EOF&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nw&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;ew&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Stdout&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Write&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;buf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]);&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nw&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;nr&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Fprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Stderr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cat: error writing from %s: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;ew&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="tcp-clientsever"&gt;TCP Client/Sever&lt;a class="anchor" href="#tcp-clientsever"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Args&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Please provide host:port.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;CONNECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;net&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Dial&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;CONNECT&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;reader&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;bufio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;NewReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Stdin&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;gt;&amp;gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;text&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;_&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;reader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;ReadString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Fprintf&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;text&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;message&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;_&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;bufio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;NewReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;).&lt;/span&gt;&lt;span style="color:#6639ba"&gt;ReadString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;-&amp;gt;: &amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;message&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;strings&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;TrimSpace&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;string&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;text&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;STOP&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;TCP client exiting...&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="server"&gt;Server&lt;a class="anchor" href="#server"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;func&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;os&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;Args&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Please provide port number&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;PORT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;arguments&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;l&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;net&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Listen&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;PORT&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;defer&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;l&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Close&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;l&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Accept&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;netData&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;bufio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;NewReader&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;).&lt;/span&gt;&lt;span style="color:#6639ba"&gt;ReadString&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;!=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;nil&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;err&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;strings&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;TrimSpace&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;string&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;netData&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;STOP&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Exiting TCP server!&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;fmt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;-&amp;gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;string&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;netData&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;t&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;time&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Now&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;myTime&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;:=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Format&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;time&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;RFC3339&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Write&lt;/span&gt;&lt;span style="color:#1f2328"&gt;([]&lt;/span&gt;&lt;span style="color:#6639ba"&gt;byte&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;myTime&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Ubuntu Desktop 20 LTS note</title><link>https://harryho.github.io/os/ubuntu-desktop-20/</link><pubDate>Mon, 20 Dec 2021 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-desktop-20/</guid><description>&lt;h2 id="ubuntu-20043-lts-focal-fossa"&gt;Ubuntu 20.04.3 LTS (Focal Fossa)&lt;a class="anchor" href="#ubuntu-20043-lts-focal-fossa"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ubuntu is the world’s most popular open-source desktop operating system. Ubuntu 20.04 LTS is an enterprise-grade, secure, cost-effective operating system for organisations and home users.&lt;/p&gt;
&lt;h3 id="zsh-prezto"&gt;Zsh Prezto&lt;a class="anchor" href="#zsh-prezto"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="install-prezto"&gt;Install Prezto&lt;a class="anchor" href="#install-prezto"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clear
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install -y zsh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Get prezto&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone --recursive https://github.com/sorin-ionescu/prezto.git ~/.zprezto
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Backup zsh config if it exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; -f ~/.zshrc &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv ~/.zshrc ~/.zshrc.backup
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create links to zsh config files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zlogin ~/.zlogin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zlogout ~/.zlogout
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zpreztorc ~/.zpreztorc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zprofile ~/.zprofile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zshenv ~/.zshenv
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s ~/.zprezto/runcoms/zshrc ~/.zshrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="change-theme--module"&gt;Change theme &amp;amp; module&lt;a class="anchor" href="#change-theme--module"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Update the theme &amp;lsquo;sorin&amp;rsquo; to &amp;lsquo;steeef&amp;rsquo; in .zpreztorc&lt;/li&gt;
&lt;li&gt;Add following plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;zstyle &amp;#39;:prezto:load&amp;#39; pmodule \
 &amp;#39;environment&amp;#39; \
 &amp;#39;terminal&amp;#39; \
 &amp;#39;editor&amp;#39; \
 &amp;#39;history&amp;#39; \
 &amp;#39;directory&amp;#39; \
 &amp;#39;spectrum&amp;#39; \
 &amp;#39;utility&amp;#39; \
 &amp;#39;completion&amp;#39; \
 &amp;#39;git&amp;#39; \
 &amp;#39;syntax-highlighting&amp;#39; \
 &amp;#39;history-substring-search&amp;#39; \
 &amp;#39;prompt&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="change-shell-to-zsh"&gt;Change shell to Zsh&lt;a class="anchor" href="#change-shell-to-zsh"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chsh -s &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;Which zsh&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;source&lt;/span&gt; ~/.zshrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install-docker"&gt;Install docker&lt;a class="anchor" href="#install-docker"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="set-up-the-repository"&gt;Set up the repository&lt;a class="anchor" href="#set-up-the-repository"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get install &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ca-certificates &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; curl &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gnupg &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lsb-release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="add-dockers-official-gpg-key"&gt;Add Docker’s official GPG key:&lt;a class="anchor" href="#add-dockers-official-gpg-key"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; sudo gpg --dearmor &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -o /usr/share/keyrings/docker-archive-keyring.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Use the following command to set up the stable repository. &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# To add the nightly or test repository, add the word nightly or test (or both) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# after the word stable in the commands below. Learn about nightly and test channels.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;deb [arch=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;dpkg --print-architecture&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt; signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt; stable&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="install-docker-engine"&gt;Install Docker Engine&lt;a class="anchor" href="#install-docker-engine"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Update the apt package index, and install the latest version of &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Docker Engine and containerd, or go to the next step to install &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# a specific version:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="post-installation-of-docker"&gt;Post installation of Docker&lt;a class="anchor" href="#post-installation-of-docker"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Create the docker group.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo groupadd docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Add your user to the docker group.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG docker &lt;span style="color:#953800"&gt;$USER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Log out and log back in so that your group membership is re-evaluated.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# On Linux, you can also run the following command to activate the changes to groups:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newgrp docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Test the docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker ps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="add-docker-completion-to-zsh"&gt;Add Docker completion to Zsh&lt;a class="anchor" href="#add-docker-completion-to-zsh"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Add the completion to prezto&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fLo ~/.zprezto/modules/completion/external/src/_docker &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Add following line to zshrc&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;autoload -Uz compinit; compinit&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="git"&gt;Git&lt;a class="anchor" href="#git"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="set-git-credential-store"&gt;Set git credential store&lt;a class="anchor" href="#set-git-credential-store"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config credential.helper store	
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# OR &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global credential.helper store	&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="dotnet-core-6-sdk"&gt;Dotnet Core 6 SDK&lt;a class="anchor" href="#dotnet-core-6-sdk"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add the Microsoft package signing key to your list of trusted keys and add the package repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg -i packages-microsoft-prod.deb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm packages-microsoft-prod.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Install the SDK&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get install -y apt-transport-https &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get update &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt-get install -y dotnet-sdk-6.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="golang"&gt;Golang&lt;a class="anchor" href="#golang"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Download &amp;amp; install the golang tal ball&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Download the linux tar ball from golang site&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rm -rf /usr/local/go &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo tar -C /usr/local -xzf go1.17.5.linux-amd64.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Set the Go to PATH on file &lt;code&gt;.zshrc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export PATH=$PATH:/usr/local/go/bin&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Verify the version&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;go version&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="rustlang"&gt;Rustlang&lt;a class="anchor" href="#rustlang"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Use universal script&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl --proto &amp;#39;=https&amp;#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="java-openjdk"&gt;Java: OpenJDK&lt;a class="anchor" href="#java-openjdk"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install LTS JDK&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sudo apt install -y openjdk-8-jdk &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; openjdk-11-jdk &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; openjdk-17-jdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Setup default JDK&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --config java&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Angular 9 CRM Starter Project</title><link>https://harryho.github.io/projects/angular-crm/</link><pubDate>Fri, 07 Feb 2020 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/angular-crm/</guid><description>&lt;h3 id="key-takeaways"&gt;Key Takeaways&lt;a class="anchor" href="#key-takeaways"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Angular 9 is here now.&lt;/li&gt;
&lt;li&gt;Angular Material 9 is ready as well.&lt;/li&gt;
&lt;li&gt;Reusable starter project&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Ng-Crm&lt;/strong&gt; &amp;gt; A reusable CRM starter project for real-world business based on Angular 9, Angular-Material 9.x.&lt;/p&gt;
&lt;p&gt;This project was generated with &lt;a href="https://github.com/angular/angular-cli"&gt;Angular CLI&lt;/a&gt; version 9.x. The goal of this project is to create reusable project for real-world business. To achieve this target, we need a solution which includes simple authentication process, restful API feature with token support and simple but elegant UI design.&lt;/p&gt;</description></item><item><title> Docker Kits</title><link>https://harryho.github.io/projects/docker-toolkits/</link><pubDate>Sat, 07 Dec 2019 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/docker-toolkits/</guid><description>&lt;h2 id="docker-kits"&gt;Docker Kits&lt;a class="anchor" href="#docker-kits"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The repository is the collection of kits built on the top of docker image. At the very begiinning, the repository was built for kits used for infrastructure. It is about to expand the scope from infrastructure to simplify the integration test, even build for speical development.&lt;/p&gt;
&lt;p&gt;Repository name in Docker Hub: &lt;a href="https://hub.docker.com/r/harryh00/docker-kits"&gt;harryh00/docker-kits&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="why-chooses-docker"&gt;Why chooses docker&lt;a class="anchor" href="#why-chooses-docker"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Docker is a tool designed to make it easier to create, deploy, and run applications by using containers. Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and deploy it as one package.&lt;/p&gt;</description></item><item><title>Amazon Linux 2</title><link>https://harryho.github.io/os/amazon-linux-2/</link><pubDate>Tue, 04 Dec 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/amazon-linux-2/</guid><description>&lt;h2 id="amazon-linux-2"&gt;Amazon Linux 2&lt;a class="anchor" href="#amazon-linux-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Amazon Linux 2 is the next generation of Amazon Linux, a Linux server operating system from Amazon Web Services (AWS). It provides a secure, stable, and high performance execution environment to develop and run cloud and enterprise applications. With Amazon Linux 2, you get an application environment that offers long term support with access to the latest innovations in the Linux ecosystem. Amazon Linux 2 is provided at no additional charge.&lt;/p&gt;</description></item><item><title>SFTP &amp; GPG</title><link>https://harryho.github.io/hacks/sftp-pgp/</link><pubDate>Tue, 04 Dec 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/hacks/sftp-pgp/</guid><description>&lt;h3 id="sftp"&gt;SFTP&lt;a class="anchor" href="#sftp"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;SFTP (SSH File Transfer Protocol) is a secure file transfer protocol. It runs over the SSH protocol. It supports the full security and authentication functionality of SSH.&lt;/p&gt;
&lt;p&gt;SFTP has pretty much replaced legacy FTP as a file transfer protocol, and is quickly replacing FTP/S. It provides all the functionality offered by these protocols, but more securely and more reliably, with easier configuration. There is basically no reason to use the legacy protocols any more.&lt;/p&gt;</description></item><item><title>VPN StrongSwam setup</title><link>https://harryho.github.io/os/vpn-strongswam/</link><pubDate>Tue, 04 Dec 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/vpn-strongswam/</guid><description>&lt;h2 id="vpn-strongswan"&gt;VPN StrongSwan&lt;a class="anchor" href="#vpn-strongswan"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;strongSwan&lt;/strong&gt; is a multiplatform IPsec implementation. The focus of the project is on strong authentication mechanisms using X.509 public key certificates and optional secure storage of private keys and certificates on smartcards through a standardized PKCS#11 interface and on TPM 2.0.&lt;/p&gt;
&lt;h3 id="launch-an-instance-with-ubuntu"&gt;Launch an instance with Ubuntu&lt;a class="anchor" href="#launch-an-instance-with-ubuntu"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id="update-setup-script"&gt;Update setup script&lt;a class="anchor" href="#update-setup-script"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Following is setup.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;usage&lt;span style="color:#0550ae"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Usage: strongswan.sh [install|start] [PATADDR] [ETHDEV]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#39;install&amp;#39; parameters:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; PATADDR The private address on MARKETNET (eg. 172.17.133.10)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; ETHDEV The name of the local ethernet device (eg. etho)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exit&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;install_function &lt;span style="color:#0550ae"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; apt update -y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; apt install strongswan -y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cp ipsec.conf /etc/ipsec.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cp ipsec.secrets /etc/ipsec.secrets
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sysctl -w net.ipv4.ip_forward&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ip addr add 172.17.12.127 dev eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iptables -t nat -F
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iptables -t nat -A POSTROUTING -d 146.164.46.0/24 -j SNAT --to 172.17.12.127
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iptables-save
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;start_function &lt;span style="color:#0550ae"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec reload
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec rereadsecrets
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec up remote-vpn-b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec down remote-vpn-b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec up remote-vpn-a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ipsec down remote-vpn-a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#953800"&gt;$#&lt;/span&gt; -lt &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;No command&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usage
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;export&lt;/span&gt; &lt;span style="color:#953800"&gt;operation&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$operation&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;install&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; install_function
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;elif&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$operation&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;start&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start_function
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="update-ipsec-config"&gt;Update IPSec config&lt;a class="anchor" href="#update-ipsec-config"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;config setup
 strictcrlpolicy=no
 uniqueids = no
 charondebug=&amp;#34;ike 3,dmn 0, mgr 3, chd 2, cfg 2, knl 0, net 2, enc 0, esp 3&amp;#34;

conn %default
 auto=route
 compress=no
 type=tunnel
 keyexchange=ikev2
 ike=aes256-sha512-modp2048
 esp=aes256-sha512-modp2048
 leftauth=psk
 rightauth=psk
 authby=secret
 lifetime=28800
 ikelifetime=28800
 rekey=yes
 reauth=no
 inactivity=1800
conn remote-vpn-a
 left=%defaultroute
 leftsubnet=172.17.12.127/32
 leftid=13.31.131.113
 right=202.22.20.2
 rightid=202.22.20.2
 rightsubnet=146.164.46.0/24
conn remote-vpn-b
 left=%defaultroute
 leftsubnet=172.17.12.127/32
 leftid=13.31.131.113
 right=202.22.22.2
 rightid=202.22.22.2
 rightsubnet=146.164.46.0/24&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="update-ipsec-secrets"&gt;Update IPSec secrets&lt;a class="anchor" href="#update-ipsec-secrets"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;13.31.131.113 202.22.20.2 : PSK Your_Remote_Key
13.31.131.113 202.22.22.2 : PSK Your_Remote_Key&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="setup---test-strongswan"&gt;Setup &amp;amp; Test StrongSwan&lt;a class="anchor" href="#setup---test-strongswan"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo bash strongswan.sh install
sudo ipsec reload
sudo ipsec rereadsecrets
sudo ipsec up remote-vpn-b
sudo ipsec down remote-vpn-b
ipsec up remote-vpn-a
sudo ipsec up remote-vpn-a
ipsec up remote-vpn-b
sudo ipsec up remote-vpn-b&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>VPN VyOS setup</title><link>https://harryho.github.io/os/vpn-vyos/</link><pubDate>Tue, 04 Dec 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/vpn-vyos/</guid><description>&lt;h2 id="vpn-vyos"&gt;VPN VyOS&lt;a class="anchor" href="#vpn-vyos"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;VyOS is a fully open source network OS that runs on a wide range of hardware, virtual machines, and cloud providers and offers features for any networks, small and large.&lt;/p&gt;
&lt;h3 id="vyos-on-aws"&gt;VyOS on AWS&lt;a class="anchor" href="#vyos-on-aws"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="setup-vyos"&gt;Setup VyOS&lt;a class="anchor" href="#setup-vyos"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Launch instance with community AMI - VyOS (HVM) 1.x.x&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Customize the setup script&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;source&lt;/span&gt; /opt/vyatta/etc/functions/script-template
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;AWS_PRIVATE_IP&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;10.104.16.128
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;AWS_PUBLIC_IP&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;13.14.15.16
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;AWS_NAT_SUBNET&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;10.104.0.0/16
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;REMOTE_NAT_IP&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;127.17.12.172
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;REMOTE_VPN_SUBNET&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;146.164.46.0/24
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;REMOTE_1ST_VPN_IP&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;202.22.20.2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# REMOTE_2ND_VPN_IP=202.22.2.20 # redundant connection not currently used&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;REMOTE_PRE_SHARED_KEY&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;Your_Remote_Key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# begin configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;configure
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# input settings using set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; system host-name vyos-vpn
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# setting up NAT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; interfaces ethernet eth0 description &lt;span style="color:#0a3069"&gt;&amp;#39;aws-internal&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# create dummy ethernet device to represent REMOTE-provided private IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; interfaces dummy dum0 address &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_NAT_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;/32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; interfaces dummy dum0 description &lt;span style="color:#0a3069"&gt;&amp;#39;remote-vpn-ip&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# configure SNAT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; nat &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; rule &lt;span style="color:#0550ae"&gt;100&lt;/span&gt; description &lt;span style="color:#0a3069"&gt;&amp;#39;Internal to REMOTE&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; nat &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; rule &lt;span style="color:#0550ae"&gt;100&lt;/span&gt; destination address &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_VPN_SUBNET&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; nat &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; rule &lt;span style="color:#0550ae"&gt;100&lt;/span&gt; outbound-interface &lt;span style="color:#0a3069"&gt;&amp;#39;any&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; nat &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; rule &lt;span style="color:#0550ae"&gt;100&lt;/span&gt; &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; address &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;AWS_NAT_SUBNET&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; nat &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; rule &lt;span style="color:#0550ae"&gt;100&lt;/span&gt; translation address &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_NAT_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# setting up VPN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# set primary ethernet interface as the VPN interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ipsec-interfaces interface &lt;span style="color:#0a3069"&gt;&amp;#39;eth0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec nat-traversal &lt;span style="color:#0a3069"&gt;&amp;#39;enable&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec logging log-modes &lt;span style="color:#0a3069"&gt;&amp;#39;all&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# esp-group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp compression &lt;span style="color:#0a3069"&gt;&amp;#39;disable&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp lifetime &lt;span style="color:#0a3069"&gt;&amp;#39;28800&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp mode &lt;span style="color:#0a3069"&gt;&amp;#39;tunnel&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp pfs &lt;span style="color:#0a3069"&gt;&amp;#39;dh-group2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp proposal &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; encryption &lt;span style="color:#0a3069"&gt;&amp;#39;aes256&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec esp-group vpn-nat-esp proposal &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#6639ba"&gt;hash&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;sha1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# ike-group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike ikev2-reauth &lt;span style="color:#0a3069"&gt;&amp;#39;no&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike key-exchange &lt;span style="color:#0a3069"&gt;&amp;#39;ikev1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike lifetime &lt;span style="color:#0a3069"&gt;&amp;#39;28800&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike proposal &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; encryption &lt;span style="color:#0a3069"&gt;&amp;#39;aes256&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike proposal &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#6639ba"&gt;hash&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;sha512&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike proposal &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; dh-group &lt;span style="color:#0a3069"&gt;&amp;#39;5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike dead-peer-detection action &lt;span style="color:#0a3069"&gt;&amp;#39;restart&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike dead-peer-detection interval &lt;span style="color:#0a3069"&gt;&amp;#39;30&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; vpn ipsec ike-group vpn-nat-ike dead-peer-detection timeout &lt;span style="color:#0a3069"&gt;&amp;#39;30&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# site-to-site peer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edit vpn ipsec site-to-site peer &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_NSW_VPN_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; authentication mode &lt;span style="color:#0a3069"&gt;&amp;#39;pre-shared-secret&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; authentication pre-shared-secret &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_PRE_SHARED_KEY&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; authentication id &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;AWS_PUBLIC_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; connection-type &lt;span style="color:#0a3069"&gt;&amp;#39;initiate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; default-esp-group &lt;span style="color:#0a3069"&gt;&amp;#39;vpn-nat-esp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; ike-group &lt;span style="color:#0a3069"&gt;&amp;#39;vpn-nat-ike&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; ikev2-reauth &lt;span style="color:#0a3069"&gt;&amp;#39;inherit&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; local-address &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;AWS_PRIVATE_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; tunnel &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#6639ba"&gt;local&lt;/span&gt; prefix &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_NAT_IP&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;/32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;set&lt;/span&gt; tunnel &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; remote prefix &lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;REMOTE_VPN_SUBNET&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# commit command applies changes to VyOS device&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;commit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# save configuration to machine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;save
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# exit configuration mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# check status of VPN tunnel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;show vpn ipsec sa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# commands to check VPN status/logs/information:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# monitor vpn ipsec&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# show vpn debug&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# show log vpn ipsec&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="update-vyos-config"&gt;Update VyOS config&lt;a class="anchor" href="#update-vyos-config"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Manual update the key &lt;strong&gt;Your_Remote_Key&lt;/strong&gt; or remote IP, e.g. 202.22.20.2&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;interfaces {
 dummy dum0 {
 address 127.17.12.172/32
 address 172.17.130.96/32
 description remote-vpn-ip
 }
 ethernet eth0 {
 address dhcp
 description aws-internal
 duplex auto
 hw-id 06:73:3f:28:dd:68
 smp_affinity auto
 speed auto
 }
 loopback lo {
 }
}
nat {
 source {
 rule 100 {
 description &amp;#34;Internal to REMOTE&amp;#34;
 destination {
 address 146.164.46.0/24
 }
 outbound-interface any
 source {
 address 10.104.0.0/16
 }
 translation {
 address 127.17.12.172
 }
 }
 }
}
service {
 ssh {
 disable-password-authentication
 port 22
 }
}
system {
 config-management {
 commit-revisions 20
 }
 console {
 device ttyS0 {
 speed 9600
 }
 }
 host-name vyos-vpn
 login {
 user vyos {
 authentication {
 encrypted-password &amp;#34;*&amp;#34;
 plaintext-password &amp;#34;&amp;#34;
 public-keys aws.vpn.vyos.key.io-bd:dc:ae:d6:28:b3:5f:5b:2e:43:6f:31:b8:b3:a0:58 {
 key AAAA1234SDjsfwfsfowerudhfhdGV/V1OEqvlpeTM49TyYmGBXzq/6262fsdfyhSOHND+USFHSDGF056nvz+ilB5HcCl/+FUig3sONKKWElxK8O/oUEurERsif+IJynsdfuyhn7ndhfdfhjlshdlfhGA+Z30knWV2QDRiID52U60YijvG4wEWwOf1xEOisccbH+09fdhfbdbfHSF/3Pt0b0uafoySi5yhCX6iuhjavl5p/Rsidfysd534sdfGHdpofygeylsdgflshsFGVNSUDF/rnpludfEqjJe/75TU026vD7A7dNn816iLVnsK+NsjrT8OtXUyGzy403
 type ssh-rsa
 }
 }
 level admin
 }
 }
 ntp {
 server 0.pool.ntp.org {
 }
 server 1.pool.ntp.org {
 }
 server 2.pool.ntp.org {
 }
 }
 package {
 auto-sync 1
 repository community {
 components main
 distribution helium
 password &amp;#34;&amp;#34;
 url http://packages.vyos.net/vyos
 username &amp;#34;&amp;#34;
 }
 }
 syslog {
 global {
 facility all {
 level notice
 }
 facility protocols {
 level debug
 }
 }
 }
 time-zone UTC
}
vpn {
 ipsec {
 esp-group vpn-nat-esp {
 compression disable
 lifetime 28800
 mode tunnel
 pfs dh-group14
 proposal 1 {
 encryption aes256
 hash sha256
 }
 }
 ike-group vpn-nat-ike {
 dead-peer-detection {
 action restart
 interval 30
 timeout 30
 }
 ikev2-reauth no
 key-exchange ikev1
 lifetime 28800
 proposal 1 {
 dh-group 14
 encryption aes256
 hash sha256
 }
 }
 ipsec-interfaces {
 interface eth0
 }
 logging {
 log-modes all
 }
 nat-traversal enable
 site-to-site {
 peer 202.22.20.2 {
 authentication {
 id 13.14.15.16
 mode pre-shared-secret
 pre-shared-secret Your_Remote_Key
 }
 connection-type initiate
 default-esp-group vpn-nat-esp
 ike-group vpn-nat-ike
 ikev2-reauth inherit
 local-address 10.104.16.128
 tunnel 0 {
 allow-nat-networks disable
 allow-public-networks disable
 local {
 prefix 127.17.12.172/32
 }
 remote {
 prefix 146.164.46.0/24
 }
 }
 }
 }
 }
}&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Reboot the VyOS&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;_vyatta_op_run reboot&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Dual Boot Windows 10 &amp; Ubuntu 18</title><link>https://harryho.github.io/os/dual-boot-win10-ubuntu18/</link><pubDate>Fri, 30 Nov 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/dual-boot-win10-ubuntu18/</guid><description>&lt;h3 id="dual-boot-ubuntu-18-with-windows-10"&gt;Dual boot Ubuntu 18 with Windows 10&lt;a class="anchor" href="#dual-boot-ubuntu-18-with-windows-10"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;I have a couple Linux workstations, but all of them are old PC or laptop. Today I get a chance to test Ubuntu on a brand new laptop. Here I are going to write down all I did to create this dual boot laptop&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="caution"&gt;Caution&lt;a class="anchor" href="#caution"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The laptop I worked on is Lenovo IdeaPad S model with UEFI firmware, but it doesn&amp;rsquo;t mean all Lenovo laptops will work in the same way, not to mention other brand&amp;rsquo;s laptop. So before you try anything, please backup all your data first.&lt;/p&gt;</description></item><item><title>Ubuntu Desktop 18 LTS note</title><link>https://harryho.github.io/os/ubuntu-desktop-18/</link><pubDate>Wed, 04 Jul 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-desktop-18/</guid><description>&lt;h3 id="prelude"&gt;Prelude&lt;a class="anchor" href="#prelude"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;This article is mainly to record the stuff to do post Ubuntu Desktop 18.04 Installation.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="purpose"&gt;Purpose&lt;a class="anchor" href="#purpose"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All actions post installation is to make the Ubuntu Desktop a wonderful toolkit for developer.&lt;/p&gt;
&lt;h3 id="prerequisite"&gt;Prerequisite&lt;a class="anchor" href="#prerequisite"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install all essentials&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y git curl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y apt-transport-https ca-certificates gnupg-agent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y software-properties-common &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install--setup-zsh"&gt;Install &amp;amp; Setup Zsh&lt;a class="anchor" href="#install--setup-zsh"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install Zsh&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Setup Zsh&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;I prefer &lt;a href="https://github.com/sorin-ionescu/prezto.git"&gt;Prezto Zsh&lt;/a&gt;, which is the minimal version of Oh-My-Zsh. In my opinion, Oh-My-Zsh is kind of slow and sort of overblown.&lt;/p&gt;</description></item><item><title>Raspberry Pi setup</title><link>https://harryho.github.io/os/raspberrypi-notes/</link><pubDate>Sat, 06 Jan 2018 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/raspberrypi-notes/</guid><description>&lt;p&gt;Prelude&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;*This note is mainly to record how to setup Raspberry Pi as file server.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You have a Raspberry Pi with pre-installed raspbian SD card&lt;/li&gt;
&lt;li&gt;You are happy to get your hands dirty&lt;/li&gt;
&lt;li&gt;You have some basic computer concept.&lt;/li&gt;
&lt;li&gt;RPi is short for Raspberry Pi&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="my-raspberry-pi-is-a-bit-old"&gt;My Raspberry Pi is a bit old&lt;a class="anchor" href="#my-raspberry-pi-is-a-bit-old"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I only have the RPi 1 model B with pre-installed raspbian SD card in place. It is quite outdated. If you don’t know the model of your RPi, please don’t worry it now. I will explain how to get the info later. I got this RPi as a gift 2 years ago. I left it in the garage and totally forgot it, until I cleaned up my garage a couple months ago. Actually I loved the old model with transparent plastic box more than the new one. I knew if I continued to leave it in the garage, it would be a rubbish soon, because it is not easy to find some equipment or software compatible with the old RPi. Luckily the lifespan of RPi is much longer than the mobile phone, but it still took me some effort to setup the wifi adapter.&lt;/p&gt;</description></item><item><title>Lubuntu 16 desktop</title><link>https://harryho.github.io/os/lubuntu16-desktop/</link><pubDate>Thu, 04 Jan 2018 13:59:31 +1100</pubDate><guid>https://harryho.github.io/os/lubuntu16-desktop/</guid><description>&lt;p&gt;Prelude&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;There is no big difference against setup between Lubuntu and Ubuntu. I just want to keep a latest version of setup for myself as reference&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You have Lubuntu 16 in place&lt;/li&gt;
&lt;li&gt;Internet is available&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ufw-setup"&gt;UFW setup&lt;a class="anchor" href="#ufw-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 80/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow ssh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 443/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 8000/tcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ssh-server-setup"&gt;SSH server setup&lt;a class="anchor" href="#ssh-server-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;!!! For production environment, SSH should be secured by the CA&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Try Minikube</title><link>https://harryho.github.io/blogs/k8s-on-vm/</link><pubDate>Wed, 11 Oct 2017 11:59:31 +1100</pubDate><guid>https://harryho.github.io/blogs/k8s-on-vm/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install KVM or VirtualBox&lt;/li&gt;
&lt;li&gt;Install Ubuntu / Debian on KVM or VirtualBox&lt;/li&gt;
&lt;li&gt;Install Minikube&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="check-k8s-version-and-config"&gt;Check K8s version and config&lt;a class="anchor" href="#check-k8s-version-and-config"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;kubectl version
kubectl config
kubectl cluster-info
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="get--describe-command"&gt;Get / Describe command&lt;a class="anchor" href="#get--describe-command"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;kubectl get ndoes
kubectl get pods
kubectl get deployments
kubectl get services

kubectl describe pods
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="deploy-hello-world-node-demo-app"&gt;Deploy hello-world node demo app&lt;a class="anchor" href="#deploy-hello-world-node-demo-app"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Deploy a demo app&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl run kubernetes-bootcamp --image&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;gcr.io/google-samples/kubernetes-bootcamp:v1 --port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# View deployments and pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get deployments
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pods that are running inside Kubernetes are running on a private, isolated network. By default they are visible from other pods and services within the same kubernetes cluster, but not outside that network.&lt;/p&gt;</description></item><item><title>Grub Trouble Shooting</title><link>https://harryho.github.io/os/grub-trouble-shooting/</link><pubDate>Wed, 20 Sep 2017 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/grub-trouble-shooting/</guid><description>&lt;h2 id="update-grub-menu-for-dual-os-boot"&gt;Update Grub Menu for dual OS boot&lt;a class="anchor" href="#update-grub-menu-for-dual-os-boot"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Change BIOS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start your PC by pressing a pressing a special function key (usually F12, F10 or F2 depending on the vendor specifications).&lt;/li&gt;
&lt;li&gt;Some PC&amp;rsquo;s BIOS has &lt;code&gt;BOOT&lt;/code&gt; tab option, open the &lt;code&gt;BOOT&lt;/code&gt; tab, you will find the &lt;code&gt;OS Boot Manager&lt;/code&gt;. It is the simplest way to fix the issue. If your PC&amp;rsquo;s BIOS has no such setting feature, you need to check the next section.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Change the Windows Boot Manager&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>FlatApi - Restful API for python dev</title><link>https://harryho.github.io/projects/python-flat-api/</link><pubDate>Thu, 03 Aug 2017 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/python-flat-api/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;FlatApi is a &lt;strong&gt;zero coding&lt;/strong&gt; and &lt;strong&gt;zero configuration&lt;/strong&gt; restful API server inspired by Json-Server_ and Eve_. It is designed to be used as fake restful api for development, especially for people want to use Python stack. Setup process is &lt;strong&gt;less than 10 seconds&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="flatapi"&gt;FlatApi&lt;a class="anchor" href="#flatapi"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zero coding and configuration to setup Restful API&lt;/strong&gt; FlatApi is designed to use without coding and configuration by default. You just need one config to setup all endpoints you need, then you can use it immediately.&lt;/p&gt;</description></item><item><title>Angular vs React vs Vue</title><link>https://harryho.github.io/blogs/vue-ng-react/</link><pubDate>Wed, 07 Jun 2017 16:56:21 +1100</pubDate><guid>https://harryho.github.io/blogs/vue-ng-react/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Angular, React, Vue as most popular JavaScript frameworks at present, we just discuss Angular 1.x, Angular 2 / 4, React 15+ (Redux), and Vue 2+ here. There is no Angular 3, if you have not noticed before.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="client-side-is-a-battle-field"&gt;Client side is a battle field&lt;a class="anchor" href="#client-side-is-a-battle-field"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In past 6–8 years, the Restful API has been accepted as one of standard web interfaces for most web applications, solution architect can simply add REST API on the top of existing web layer or business layer to provide REST API and support multiple client devices. So the developers can continue to develop or maintain system with their favorite programming language, framework or technical stacks.&lt;/p&gt;</description></item><item><title>Ubuntu 16 server note</title><link>https://harryho.github.io/os/ubuntu-server-16/</link><pubDate>Thu, 04 May 2017 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-server-16/</guid><description>&lt;p&gt;Prelude&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;This article is mainly to help experienced user install and setup Ubuntu 16 LTS Server. If you are looking for the information for Ubuntu 14, please go to the page &lt;a href="https://harryho.github.io/os/ubuntu-server-14/"&gt;Ubuntu 14 server setup&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are familiar with Ubuntu, at least you have some experience working on Linux system.&lt;/li&gt;
&lt;li&gt;You are familiar with basic bash/shell command&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wireless-setup"&gt;Wireless Setup&lt;a class="anchor" href="#wireless-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;If you install ubuntu server on a laptop, you might end up to setup the wifi first. Usually you won&amp;rsquo;t bring the cable with your laptop wherever you go, also you might just have no cable or run out all cables. Now let&amp;rsquo;s dive into how to setup the wifi on sever.&lt;/p&gt;</description></item><item><title>Create a blog site on GitHub Pages</title><link>https://harryho.github.io/blogs/create-a-blog-on-github/</link><pubDate>Wed, 15 Feb 2017 14:59:31 +1100</pubDate><guid>https://harryho.github.io/blogs/create-a-blog-on-github/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;If you use Unix-style system, I recommend you to follow the &lt;a href="https://gohugo.io/overview/quickstart/"&gt;Hugo Quick Start&lt;/a&gt; and &lt;a href="https://gohugo.io/tutorials/github-pages-blog"&gt;Hosting on GitHub Pages&lt;/a&gt; to create a blog to GitHub pages within 5 mins.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;When I decided to use hugo to create a blog on GitHub pages from my windows machine, it took me over 30 mins. I hope this blog can help someone want to do sth similar within Windows environment.*&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="step-1---plan-and-prepare"&gt;Step 1 - Plan and prepare&lt;a class="anchor" href="#step-1---plan-and-prepare"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="prerequisite"&gt;Prerequisite&lt;a class="anchor" href="#prerequisite"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;You already have &lt;em&gt;Hugo&lt;/em&gt; on your computer. If not, please follow the instruction to &lt;a href="https://gohugo.io/tutorials/installing-on-windows"&gt;install hugo on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="manage-your-github-repositories"&gt;Manage your github repositories&lt;a class="anchor" href="#manage-your-github-repositories"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You will have two repositories &lt;strong&gt;blog-hugo&lt;/strong&gt; and &lt;code&gt;&amp;lt;username&amp;gt;.github.io&lt;/code&gt; repositories to hold your hugo content and blog site respectively.&lt;/p&gt;</description></item><item><title>CentOS 7 Server</title><link>https://harryho.github.io/os/centos-server-7/</link><pubDate>Fri, 03 Feb 2017 10:59:31 +1100</pubDate><guid>https://harryho.github.io/os/centos-server-7/</guid><description>&lt;p&gt;Prelude&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;This article is mainly to help experienced user install and setup CentOS 7 Server.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are familiar with CentOS, at least you have some experience working on Linux system.&lt;/li&gt;
&lt;li&gt;You are familiar with basic bash/shell command&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="things-to-do-after-installing-centos-server"&gt;Things to do after installing CentOS server&lt;a class="anchor" href="#things-to-do-after-installing-centos-server"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;How to setup your server&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="firewall-setup"&gt;Firewall setup&lt;a class="anchor" href="#firewall-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --permanent --add-port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;22/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --permanent --add-port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;21/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --permanent --add-port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;80/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --permanent --add-port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;443/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --permanent --add-port&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;8080/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ssh-server-setup"&gt;SSH server setup&lt;a class="anchor" href="#ssh-server-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;!!! For production environment, SSH should be secured by the CA&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Angular 4 CRM Project</title><link>https://harryho.github.io/projects/angular4-crm/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/angular4-crm/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ng4Crm&lt;/strong&gt; is reusable CRM project for real-world business based on Angular 4, Angular-Material &amp;amp; Bootstrap 3.&lt;/p&gt;
&lt;p&gt;This project starts from a popular starter project &lt;a href="https://github.com/AngularClass/angular-starter"&gt;AngularClass/AngularStarter&lt;/a&gt;. The goal of this project is to create reusable project for real-world business. To achieve this target, we need a solution which should include authentication process, restful API feature with token support and simple but elegant UI design.&lt;/p&gt;
&lt;h2 id="features"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;a class="anchor" href="#features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This project is built on the top of AngularClass/Angular-Starter.&lt;/p&gt;</description></item><item><title>CNTK Note - 1</title><link>https://harryho.github.io/frameworks/cntk-notes-1/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/frameworks/cntk-notes-1/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are using Windows 7 or higher version&lt;/li&gt;
&lt;li&gt;You are using Anaconda to setup the environment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-cntk-virtual-environment"&gt;Create CNTK virtual environment&lt;a class="anchor" href="#create-cntk-virtual-environment"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="use-follow-command-to-remove-existing-virtual-environment"&gt;use follow command to remove existing virtual environment&lt;a class="anchor" href="#use-follow-command-to-remove-existing-virtual-environment"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt; conda remove -n cntk --all
 conda create -n cntk 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="activate-virtual-environment-and-install-cntk"&gt;Activate virtual environment and install CNTK&lt;a class="anchor" href="#activate-virtual-environment-and-install-cntk"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;activate cntk
pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0rc3-cp36-cp36m-win_amd64.whl
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="test-cntk"&gt;Test CNTK&lt;a class="anchor" href="#test-cntk"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;python
&amp;gt;&amp;gt;&amp;gt; import cntk
&amp;gt;&amp;gt;&amp;gt; cntk.__version__
'2.0rc3'
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Laravel MVC Starter</title><link>https://harryho.github.io/projects/laravel-mvc-starter/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/laravel-mvc-starter/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This starter is the starting point of laravel 5 MVC project. This application is meant to be used as a starting place for those looking to get their feet wet with laravel.&lt;/p&gt;
&lt;h2 id="overview-of-project"&gt;Overview of project&lt;a class="anchor" href="#overview-of-project"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="bdd--business-domain-design"&gt;BDD ( Business domain design)&lt;a class="anchor" href="#bdd--business-domain-design"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+-------+ 0...* 0...* +--------+ 1 0...* +---------+ &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| tag | --------------- | post | ----- ----- | comment |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+-------+ +--------+ +---------+ &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;| 1...*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;| 0...*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;+--------+ &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;| like |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;+--------+&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="structure-of-starter"&gt;Structure of starter&lt;a class="anchor" href="#structure-of-starter"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;\path\to\lara-mvc-starter
+---app &amp;lt;-// Customized PHP application code
| +---Console
| +---Exceptions
| +---Http
| | +---Controllers
| | | \---Auth
| | \---Middleware
| \---Providers
+---bootstrap &amp;lt;-// bootstrap the framework and configure autoloading
| \---cache
+---config &amp;lt;-// application configuration
+---database &amp;lt;-// database migration files
| +---factories
| +---migrations
| \---seeds
+---public &amp;lt;-// Distributed website folder including Style sheet
+---resources &amp;lt;-// View files, Javascripts, localization setting
| +---assets
| +---lang
| \---views
| +---admin
| +---blog
| +---errors
| +---layouts
| +---other
| +---partials
| \---vendor
| \---pagination
+---routes &amp;lt;-// Route definitions and setting
+---storage &amp;lt;-//Blade templates, file based sessions, file caches
| +---app
| | \---public
| +---framework
| | +---cache
| | +---sessions
| | \---views
| \---logs
+---tests
\---vendor &amp;lt;-// Laravel framework&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="screenshots"&gt;Screenshots&lt;a class="anchor" href="#screenshots"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;img src="https://harryho.github.io/img/lara-mvc-starter.png" alt="laravel-mvc-starter" /&gt;&lt;/p&gt;</description></item><item><title>React Redux CRM Project</title><link>https://harryho.github.io/projects/react-crm/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/react-crm/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;React-Crm&lt;/strong&gt; is reusable CRM starter project for real-world business based on React 15.4, React-Redux &amp;amp; Material-UI.&lt;/p&gt;
&lt;p&gt;The goal of this starter project is to create reusable project for real-world business. To achieve this target, we need a solution which should include authentication process, restful API feature with token support and simple but elegant UI design.&lt;/p&gt;
&lt;h2 id="features"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;a class="anchor" href="#features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This project is built on the top of React/Redux.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The UI part of this project uses Material-UI.&lt;/p&gt;</description></item><item><title>Tensorflow Note - 1</title><link>https://harryho.github.io/frameworks/tensorflow-notes-1/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/frameworks/tensorflow-notes-1/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;TensorFlow is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries and community resources that lets researchers push the state-of-the-art in ML and developers easily build and deploy ML powered applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You are using Ubuntu 16&lt;/li&gt;
&lt;li&gt;Your machine has Nvidia GPU card installed&lt;/li&gt;
&lt;li&gt;If you are using Ubuntu 14, the installation of CUDA and cuDNN will be a bit different. Please check Google&amp;rsquo;s instructions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="install-python3-and-pip3"&gt;Install python3 and pip3&lt;a class="anchor" href="#install-python3-and-pip3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harryho.github.io/os/ubuntu-server-14"&gt;Please find instructions here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="install-virtualenv-via-pip3"&gt;Install virtualenv via pip3&lt;a class="anchor" href="#install-virtualenv-via-pip3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pip3 install virtualenv
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="create-two-tensorflow-virtualenvs"&gt;Create two tensorflow virtualenvs.&lt;a class="anchor" href="#create-two-tensorflow-virtualenvs"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/.envs
virtualenv --system-site-packages ~/.envs/tf ### CPU only
virtualenv --system-site-packages ~/.envs/tfgpu ### GPU enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="install-tensorflow-for-different-virtualenvs"&gt;Install tensorflow for different virtualenvs&lt;a class="anchor" href="#install-tensorflow-for-different-virtualenvs"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;source ~/.envs/tf/bin/activate
source ~/.envs/tfgpu/bin/activate

pip3 install tensorflow ### CPU only
pip3 install tensorflow-gpu ### GPU enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="install-cuda-and-cudnn-for-tensorflow-gpu"&gt;Install CUDA and cuDNN for tensorflow-gpu&lt;a class="anchor" href="#install-cuda-and-cudnn-for-tensorflow-gpu"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use following command to check you GPU information&lt;/p&gt;</description></item><item><title>Tensorflow Note - 2</title><link>https://harryho.github.io/frameworks/tensorflow-notes-2/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/frameworks/tensorflow-notes-2/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are using Windows 7 or higher version&lt;/li&gt;
&lt;li&gt;You are using Anaconda to setup the environment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-anaconda"&gt;Install Anaconda&lt;a class="anchor" href="#install-anaconda"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Anaconda® is a package manager, an environment manager, a Python/R data science distribution, and a collection of over 1,500+ open source packages. Anaconda is free and easy to install, and it offers free community support.&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.continuum.io/downloads"&gt;Please download Anaconda from the official site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-tensorflow-virtualenv-with-python-35"&gt;Create tensorflow virtualenv with python 3.5&lt;a class="anchor" href="#create-tensorflow-virtualenv-with-python-35"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Anaconda uses python 3.6 by default. Tensorflow only supports python 3.5.&lt;/p&gt;</description></item><item><title>Vue 2 Admin Project</title><link>https://harryho.github.io/projects/vue2-admin/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/vue2-admin/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vue2Admin&lt;/strong&gt; is a fully responsive admin template that is inspired by &lt;a href="https://almsaeedstudio.com"&gt;AdminLTE&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="anchor" href="#features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This template is built-in with Vue 2 at the start.&lt;/li&gt;
&lt;li&gt;It include Vue Resource, Vuex as well.&lt;/li&gt;
&lt;li&gt;The plugins for this project are loaded with script loader.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="structure-of-reetek-vue2admin"&gt;Structure of Reetek Vue2Admin&lt;a class="anchor" href="#structure-of-reetek-vue2admin"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;path\to\vue2admin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---build &amp;lt;-// webpack files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---config &amp;lt;-// configuration of dev or prod environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---screenshots&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---src &amp;lt;-// vue components &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---components&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---charts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---dashboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---forms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---mailbox&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---misc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---pages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---tables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---ui&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | \---widget&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---filters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---static &amp;lt;-// css, dump data, fonts, image files and plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---css&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---fonts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---credit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | \---stock&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---js&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---plugins &amp;lt;-// plugins for admin dashboard &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---AdminLTE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---bootstrap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---bootstrap-slider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---bootstrap-wysihtml5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---chartjs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---ckeditor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| + ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;\---test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;+---e2e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;\---unit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="screenshots"&gt;Screenshots&lt;a class="anchor" href="#screenshots"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;img src="https://harryho.github.io/img/vue2admin_screenshot1_sm.png" alt="Screenshot1" /&gt;&lt;/p&gt;</description></item><item><title>Vue 2 CRM Project</title><link>https://harryho.github.io/projects/vue2-crm/</link><pubDate>Wed, 07 Dec 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/vue2-crm/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vue2Crm&lt;/strong&gt; is a reusable Vue.js CRM starter project for real-world business based on Vue 2 PWA template with Vuetify.&lt;/p&gt;
&lt;p&gt;The goal of this project is to create a reusable project for real-world business. To achieve this target, we need a solution which includes authentication process, restful API feature and simple but elegant UI design.&lt;/p&gt;
&lt;h2 id="features"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;a class="anchor" href="#features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This starter project is built-in with Vue 2 PWA from scratch.&lt;/li&gt;
&lt;li&gt;The whole UI is built on the Vuetify&lt;/li&gt;
&lt;li&gt;It includes Vuex, Axios as well.&lt;/li&gt;
&lt;li&gt;It uses Json-Server as fake Restful API. (You can simple replace it with your own API)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="structure-of-vue2crm"&gt;Structure of Vue2Crm&lt;a class="anchor" href="#structure-of-vue2crm"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;path\to\vue2crm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---build &amp;lt;-// webpack files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---config &amp;lt;-// configuration of dev or prod environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---db &amp;lt;-// json files for json-server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---db.json &amp;lt;-// dummy db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---routes.json &amp;lt;-// configure fake restful api&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---screenshots&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---src &amp;lt;-// vue components &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---components&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---404.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---About.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---Customers.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---Customer.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---Orders.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---Order.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---Login.vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | \---...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---router &amp;lt;-// vue-router&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---utils&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---auth.js &amp;lt;-// auth service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---backend-api.js &amp;lt;-// Axios instance &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| | +---store.js &amp;lt;-// Vuex&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---stylus &amp;lt;-// Customize stylus&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;+---static &amp;lt;-// css, fonts, image files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| +---img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;| \---manifest.json &amp;lt;-// PWA manifest file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;\---test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;+---e2e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;\---unit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="screenshots"&gt;Screenshots&lt;a class="anchor" href="#screenshots"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;img src="https://harryho.github.io/img/v2crm-screenshot-1.jpg" alt="Screenshot1" /&gt;&lt;/p&gt;</description></item><item><title>Angularjs Webpack ES6 Starter</title><link>https://harryho.github.io/projects/angularjs-webpack-es6-starter/</link><pubDate>Tue, 15 Nov 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/angularjs-webpack-es6-starter/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It simply includes font-awesome, bootstrap for the people who don&amp;rsquo;t want to use boostrap-webpack, font-awesome-webpack. I find it saves us so much effort to create prototype, since we don&amp;rsquo;t need spectacular UI.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This starter uses angular 1.5 for someone want to build component.&lt;/li&gt;
&lt;li&gt;This repo follows mvc patterns instead of component pattern.&lt;/li&gt;
&lt;li&gt;ES6, and ES7 support with babel.&lt;/li&gt;
&lt;li&gt;Development server with live reload.&lt;/li&gt;
&lt;li&gt;Production builds with cache busting.&lt;/li&gt;
&lt;li&gt;Testing environment using karma to run tests and jasmine as the framework.&lt;/li&gt;
&lt;li&gt;Code coverage when tests are run.&lt;/li&gt;
&lt;li&gt;Include font-awesome without font-awesome-loader.&lt;/li&gt;
&lt;li&gt;Include Bootstrap 3 without bootstrap-loader.&lt;/li&gt;
&lt;li&gt;No gulp and no grunt, just npm scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="structure-of-starter"&gt;Structure of starter&lt;a class="anchor" href="#structure-of-starter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\p&lt;/span&gt;ath&lt;span style="color:#0a3069"&gt;\t&lt;/span&gt;o&lt;span style="color:#0a3069"&gt;\a&lt;/span&gt;ngularjs-webpack-es6-starter
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; .babelrc &amp;lt;-// default setting es2015.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; karma.conf.js &amp;lt;-// tests and report setup 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; webpack.config.js &amp;lt;-// webpack config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; tests.webpack.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; +---app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; app.html &amp;lt;-// app view
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; app.js &amp;lt;-// app module
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; app.routes.js &amp;lt;-// app route to manage all routes 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; app.runner.js &amp;lt;-// app runner &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; state change enhancement 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; app.spec.js &amp;lt;-// app spec file &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; testing 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---common &amp;lt;-// common module &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; whole app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; common.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; common.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---directives &amp;lt;-// common directives &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; whole app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; appUiDirectives.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; appUiDirectives.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; commonDirectives.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; commonDirectives.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---services &amp;lt;-// common views &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; whole app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; ApiService.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; ApiService.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; UtilService.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; UtilService.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--views &amp;lt;-// contains common views
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; footer-view.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; header-view.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; sidebar-view.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; topbar-view.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--main &amp;lt;-// built-in fonts, css, images 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--dashboard
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---controllers
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; dashboardController.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; dashboardController.spec.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--views
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; dashboard-view.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; +---public &amp;lt;-// built-in fonts, css, images 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; index.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---fonts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +--- ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--img
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +--- favicon.ico
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--style &amp;lt;-// css files including customized css
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="browse-repository"&gt;Browse &lt;a href="https://github.com/harryho/angularjs-webpack-es6-starter.git"&gt;Repository&lt;/a&gt;&lt;a class="anchor" href="#browse-repository"&gt;#&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>Git Practices</title><link>https://harryho.github.io/hacks/git-notes/</link><pubDate>Thu, 11 Aug 2016 11:59:31 +1100</pubDate><guid>https://harryho.github.io/hacks/git-notes/</guid><description>&lt;h2 id="push-existing-repository-to-remote"&gt;Push existing repository to remote&lt;a class="anchor" href="#push-existing-repository-to-remote"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Update the remote git url&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; $ git remote set-url origin [your_new_repo_url] 
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push it remote branch master/main&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; $ git push -uf origin [master/main]
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-a-new-branch-with-git"&gt;Create a new branch with git&lt;a class="anchor" href="#create-a-new-branch-with-git"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="create-the-branch-locally"&gt;Create the branch locally&lt;a class="anchor" href="#create-the-branch-locally"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create the branch on your local machine and switch in this branch&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; $ git checkout -b [name_of_your_new_branch]
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="push-the-branch"&gt;Push the branch&lt;a class="anchor" href="#push-the-branch"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Push the branch on git-repository (Github, Bitbucket)&lt;/p&gt;</description></item><item><title>PHP Web Framework</title><link>https://harryho.github.io/frameworks/php-web/</link><pubDate>Thu, 11 Aug 2016 11:59:31 +1100</pubDate><guid>https://harryho.github.io/frameworks/php-web/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;Here we are going to explore some PHP web frameworks.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="php-development-environment-setup"&gt;PHP development environment setup&lt;a class="anchor" href="#php-development-environment-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="install-php-56x"&gt;Install PHP 5.6.x&lt;a class="anchor" href="#install-php-56x"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Please find the instruction from &lt;a href="https://harryho.github.io/#php"&gt;home page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Composer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="linux"&gt;Linux&lt;a class="anchor" href="#linux"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;curl -s https://getcomposer.org/installer | php --&lt;/code&gt; to install composer on Linux&lt;/li&gt;
&lt;li&gt;use &amp;lsquo;composer -v &amp;rsquo; to verify.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="windows"&gt;Windows&lt;a class="anchor" href="#windows"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Download the &lt;a href="https://getcomposer.org/download/"&gt;composer&lt;/a&gt; and install php on your PC&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;composer -v&lt;/code&gt; to verify the composer is ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="zend-framework"&gt;Zend Framework&lt;a class="anchor" href="#zend-framework"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Zend Framework 2.x is a collection of 60+ packages for professional PHP development. It can be used to develop web applications and services using PHP 5.6+, and provides 100% object-oriented code using a broad spectrum of language features.&lt;/p&gt;</description></item><item><title>Build mobile app with web tech</title><link>https://harryho.github.io/blogs/build-mobile-app/</link><pubDate>Sun, 10 Jul 2016 14:59:31 +1100</pubDate><guid>https://harryho.github.io/blogs/build-mobile-app/</guid><description>&lt;h2 id="what-is-mobile-app"&gt;What is mobile app&lt;a class="anchor" href="#what-is-mobile-app"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;A mobile application, basically, is a computer generated program designed and developed to run on iPhone, Android Smartphone, and many other mobile devices. In a nutshell, there are three types of apps&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Native apps&lt;/strong&gt; are specific to a given mobile platform (iOS or Android) using the development tools and language that the respective platform. Usaully it looks and performs the best.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;HTML5 apps&lt;/strong&gt; use standard web technologies—typically HTML5, JavaScript and CSS. This write-once-run-anywhere approach to mobile development creates cross-platform mobile applications that work on multiple devices.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Azure Practices</title><link>https://harryho.github.io/blogs/azure-notes/</link><pubDate>Sun, 10 Apr 2016 14:59:31 +1100</pubDate><guid>https://harryho.github.io/blogs/azure-notes/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;Here we are going to explore how to deploy web applications to Azure. From sep 2015, Microsoft launched new portal for Azure. To be honest, new portal is amazing, IMO, it is one of best changes from Microsoft.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You have experience with .net web applications.&lt;/li&gt;
&lt;li&gt;You have experience with website or web app deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;a class="anchor" href="#getting-started"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Register a Microsoft account. e.g. live.com, outlook.com, etc.&lt;/li&gt;
&lt;li&gt;Start free trial account on Azure cloud&lt;/li&gt;
&lt;li&gt;Install Azure powershell, Azure CLI, Azure SDK for Visual Studio&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="app-service"&gt;App Service&lt;a class="anchor" href="#app-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="web-app"&gt;Web app&lt;a class="anchor" href="#web-app"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a website from portal&lt;/p&gt;</description></item><item><title>Ubuntu 14 -- server setup</title><link>https://harryho.github.io/os/ubuntu-server-14/</link><pubDate>Fri, 04 Mar 2016 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-server-14/</guid><description>&lt;p&gt;Prelude&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;This article is mainly to help experienced user install and setup Ubuntu server. If you are not familiar with Ubuntu system, please install Ubuntu desktop version at first, and you can follow &lt;a href="https://harryho.github.io/os/ubuntu-desktop-14/"&gt;Ubuntu deskstop setup&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are familiar with Ubuntu, at least you have some experience working on Linux system.&lt;/li&gt;
&lt;li&gt;You are familiar with bash/shell script&lt;/li&gt;
&lt;li&gt;You are going to setup Ubuntu server for special purpose. e.g. Web server, file server, or data center.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ufw-setup"&gt;UFW setup&lt;a class="anchor" href="#ufw-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 80/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow ssh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 443/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow 8000/tcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ssh-server-setup"&gt;SSH server setup&lt;a class="anchor" href="#ssh-server-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="secure-ssh-with-ca-in-production"&gt;Secure SSH with CA in production&lt;a class="anchor" href="#secure-ssh-with-ca-in-production"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install openssh-server 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## backup default config &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chmod a-w /etc/ssh/sshd_config.factory-defaults
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## use any editor to update sshd_config &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/ssh/sshd_config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## uncomment PasswordAuthentication yes to allow remote password login&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Password authentication is only for test environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## setup ssh auto-start onboot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-rc.d ssh defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="time-zone-setup"&gt;Time Zone setup&lt;a class="anchor" href="#time-zone-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg-reconfigure tzdata&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-software-properties-common-package"&gt;install software-properties-common Package&lt;a class="anchor" href="#install-software-properties-common-package"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;software-properties-common python-software-properties&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Install byobu screen&lt;/p&gt;</description></item><item><title>Zend Framework 2 MVC Starter</title><link>https://harryho.github.io/projects/zf2-mvc-starter/</link><pubDate>Tue, 09 Feb 2016 16:56:21 +1100</pubDate><guid>https://harryho.github.io/projects/zf2-mvc-starter/</guid><description>&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This starter is the starting point of zend framework 2 MVC project. This application is meant to be used as a starting place for those looking to get their feet wet with ZF2.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="anchor" href="#features"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This starter was built on the zend framework 2.x.&lt;/li&gt;
&lt;li&gt;This starter uses mysql as database setting by default.&lt;/li&gt;
&lt;li&gt;Include digest authentication by default.&lt;/li&gt;
&lt;li&gt;Include font-awesome files.&lt;/li&gt;
&lt;li&gt;Include Bootstrap 3 without bootstrap-loader.&lt;/li&gt;
&lt;li&gt;Include html5shiiv.js to support older IE browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="structure-of-starter"&gt;Structure of starter&lt;a class="anchor" href="#structure-of-starter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\p&lt;/span&gt;ath&lt;span style="color:#0a3069"&gt;\t&lt;/span&gt;o&lt;span style="color:#0a3069"&gt;\z&lt;/span&gt;f2-mvc-starter
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---config // Database, authorizaion, authentication setting
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---data 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---module // Customized application sources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---Application // Global module used by whole application
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--module.config.php // Register all modules 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---language
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--Application
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---Controller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--Factory
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--AuthenticationAdapterFactory.php
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--view // Contains common master, basic layout files 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---application
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--index
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---error
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---layout
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--partial
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---BookList // Customized module &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; business purpose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--BookList
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---Controller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---Form
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--Model
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--view
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--book-list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--book
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--Test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---public // Contains all fonts, css, images, and js files
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---css
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---fonts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; +---img
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\-&lt;/span&gt;--vendor // Contains Zend Framework &lt;span style="color:#0550ae"&gt;2&lt;/span&gt; &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; code
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="screenshot-of-home-page"&gt;Screenshot of home page&lt;a class="anchor" href="#screenshot-of-home-page"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;img src="https://harryho.github.io/img/zf2-mvc-starter.png" alt="zf2-mvc-starter" /&gt;&lt;/p&gt;</description></item><item><title>Ubuntu 14 -- desktop setup &amp; dual boot</title><link>https://harryho.github.io/os/ubuntu-desktop-14/</link><pubDate>Sun, 10 Jan 2016 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-desktop-14/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;This article is mainly to help beginner install Ubuntu desktop at the first time. If you are looking for setup of Ubuntu server, please check out the blog &amp;ndash; &lt;a href="https://harryho.github.io/os/ubuntu-server-14/"&gt;Ubuntu server setup&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="where-to-install-linux"&gt;Where to install Linux?&lt;a class="anchor" href="#where-to-install-linux"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to answer this quetion really depends user&amp;rsquo;s computer knowledge and skills. Basically Linux can be installed on almost any PC, laptop, embedded device or tablet. So there are some suggestions for people with different level skills.*&lt;/p&gt;</description></item><item><title>Ubuntu 14 -- desktop, extra tools</title><link>https://harryho.github.io/os/ubuntu-desktop-14-extra-tools/</link><pubDate>Sun, 10 Jan 2016 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/ubuntu-desktop-14-extra-tools/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install Ubunt 14 Desktop&lt;/li&gt;
&lt;li&gt;Internet is availble&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-chrome"&gt;Install chrome&lt;a class="anchor" href="#install-chrome"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg -i google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-umake"&gt;Install Umake&lt;a class="anchor" href="#install-umake"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install ubuntu-make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-ides-via-umake"&gt;Install IDEs via Umake&lt;a class="anchor" href="#install-ides-via-umake"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;umake ide pycharm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;umake web visual-studio-code
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;umake android android-studio&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="general-prerequest"&gt;General prerequest&lt;a class="anchor" href="#general-prerequest"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sed -i &lt;span style="color:#0a3069"&gt;&amp;#34;/^## deb .*partner/ s/^## //&amp;#34;&lt;/span&gt; /etc/apt/sources.list &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install geany byobu p7zip-full gimp pdfshuffler scribus &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;filezilla lftp ubuntu-restricted-extras vlc pyrenamer &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;imagemagick hugin darktable skype avidemux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="remove-games"&gt;Remove Games&lt;a class="anchor" href="#remove-games"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get remove aisleriot gnome-mahjongg gnomine gnome-sudoku&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="geany-themes"&gt;Geany themes&lt;a class="anchor" href="#geany-themes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; ~/Downloads
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/codebrainz/geany-themes.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir ~/.config/geany/colorschemes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp ~/Downloads/geany-themes/colorschemes/* ~/.config/geany/colorschemes/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm -rf ~/Downloads/geany-themes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cloud"&gt;Cloud&lt;a class="anchor" href="#cloud"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;from: &lt;a href="http://www.webupd8.org/2014/06/install-copycom-client-in-ubuntu-or.html"&gt;http://www.webupd8.org/2014/06/install-copycom-client-in-ubuntu-or.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Macbook Notes - Intel X64</title><link>https://harryho.github.io/os/mac-intel64/</link><pubDate>Sun, 12 Jul 2015 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/mac-intel64/</guid><description>&lt;h3 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Mac OS 10.12+&lt;/li&gt;
&lt;li&gt;Intel X64 CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ownership-issue"&gt;Ownership issue&lt;a class="anchor" href="#ownership-issue"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If you have Homebrew or other software installed by someone else, you need to change ownership&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo chown -R $(whoami) /usr/local/brew
sudo chown -R $(whoami) /usr/local/etc
sudo chown -R $(whoami) /usr/local/share
sudo chown -R $(whoami) /usr/local/lib&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="install-homebrew"&gt;Install Homebrew&lt;a class="anchor" href="#install-homebrew"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/bash -c &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Brew commands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew upgrade 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;The cask is no longer a brew command from 2021. The command has changed as below&lt;/p&gt;</description></item><item><title>JavaScript and OOP</title><link>https://harryho.github.io/blogs/javascript-oop/</link><pubDate>Thu, 20 Mar 2014 14:59:31 +1100</pubDate><guid>https://harryho.github.io/blogs/javascript-oop/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You should have basic knowledge of Javascript and Object Oriented Programming.&lt;/li&gt;
&lt;li&gt;You should know how to test sample code on Chrome or Firefox. It is simple, just open your browser and click &lt;code&gt;F12&lt;/code&gt;, copy the code to console and then press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-is-javascript"&gt;What is JavaScript?&lt;a class="anchor" href="#what-is-javascript"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;JavaScript, not to be confused with Java, was created in 10 days in May 1995 by Brendan Eich, then working at Netscape and now of Mozilla. The original name of this language was Mocha, in September of 1995 it was changed to LiveScript, then in December of the same year, the name JavaScript was adopted, because of very popular Java around then.&lt;/p&gt;</description></item><item><title>CentOS 6/7 Multi-Boot Setup</title><link>https://harryho.github.io/os/centos-fedora-desktop/</link><pubDate>Fri, 10 Jan 2014 14:59:31 +1100</pubDate><guid>https://harryho.github.io/os/centos-fedora-desktop/</guid><description>&lt;h2 id="bootable-usb-preparation"&gt;Bootable usb preparation&lt;a class="anchor" href="#bootable-usb-preparation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Download dvd iso from url or torrent
Use Win32 Image Writer to create usb. ( Bootice is useful tool to reformat the USB as origin )&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="install-centos-on-virtual-machine"&gt;Install CentOS on virtual machine&lt;a class="anchor" href="#install-centos-on-virtual-machine"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Before you install, you are better to backup anything on the device which you are going to install, and chcek your internet is working properly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CentOS provide a friendly and nice installation process. If you choose VMWare or VirtulBox as machine, you can open &lt;a href="http://www.tecmint.com/centos-7-installation"&gt;installation steps&lt;/a&gt; on your browser or use ipad /tablet to access this page. You just need to follow the instruction step by step, it will be done within an hour or more(it varies in computing power of PC).&lt;/p&gt;</description></item><item><title> Generic Predicate &amp; Expression</title><link>https://harryho.github.io/coding/c-sharp/csharp-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c-sharp/csharp-note-4/</guid><description>&lt;h3 id="generic-predicate-and-expression-for-query"&gt;Generic Predicate and Expression for query&lt;a class="anchor" href="#generic-predicate-and-expression-for-query"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;You have experience of developing .net application, which includes entity framework.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;You have experience of using SQL to query database&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="problem"&gt;Problem&lt;a class="anchor" href="#problem"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Now entity framework is core component in all .net applications, which need to communicate with database.&lt;/p&gt;
&lt;p&gt;Business service get a lot of benefits form entity framework&amp;rsquo;s ORM feature, and we can create a repository layer on the top of ORM to reduce some simple but tedious database operation, such as, delete, insert, query all data. However, when we need to do some complicated query to support business service, we still need to take so much effort to achieve the query result, because entity framework use LINQ as query language, comparing with SQL, native database language, it is a bit more complicated and cumbersome. Luckily, entity framework provide another generic feature to help us DRY. Predicate and expression can help us create generic query and reduce many reduntant code.&lt;/p&gt;</description></item><item><title>Adv Bash - 1</title><link>https://harryho.github.io/coding/shell/bash-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/bash-note-1/</guid><description>&lt;h3 id="special-characters"&gt;Special Characters&lt;a class="anchor" href="#special-characters"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;What makes a character special? If it has a meaning beyond its literal meaning, a meta-meaning, then we refer to it as a special character. Along with commands and keywords, special characters are building blocks of Bash scripts.&lt;/p&gt;
&lt;h4 id="special-shell-variables"&gt;Special Shell Variables&lt;a class="anchor" href="#special-shell-variables"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Variable&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;$0&lt;/td&gt;
					&lt;td&gt;Filename of script&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$1&lt;/td&gt;
					&lt;td&gt;Positional parameter #1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$2 - $9&lt;/td&gt;
					&lt;td&gt;Positional parameters #2 - #9&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${10}&lt;/td&gt;
					&lt;td&gt;Positional parameter #10&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$#&lt;/td&gt;
					&lt;td&gt;Number of positional parameters&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;$*&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;All the positional parameters (as a single word) *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;$@&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;All the positional parameters (as separate strings)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${#*}&lt;/td&gt;
					&lt;td&gt;Number of positional parameters&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${#@}&lt;/td&gt;
					&lt;td&gt;Number of positional parameters&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$?&lt;/td&gt;
					&lt;td&gt;Return value&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$$&lt;/td&gt;
					&lt;td&gt;Process ID (PID) of script&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$-&lt;/td&gt;
					&lt;td&gt;Flags passed to script (using set)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$_&lt;/td&gt;
					&lt;td&gt;Last argument of previous command&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$!&lt;/td&gt;
					&lt;td&gt;Process ID (PID) of last job run in background&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="operator-precedence"&gt;Operator Precedence&lt;a class="anchor" href="#operator-precedence"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;In a script, operations execute in order of precedence: the higher precedence operations execute before the lower precedence ones.&lt;/p&gt;</description></item><item><title>Adv Bash - 2</title><link>https://harryho.github.io/coding/shell/bash-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/bash-note-2/</guid><description>&lt;h3 id="manipulating-strings"&gt;Manipulating Strings&lt;a class="anchor" href="#manipulating-strings"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Bash supports a surprising number of string manipulation operations. Unfortunately, these tools lack a unified focus. Some are a subset of parameter substitution, and others fall under the functionality of the UNIX expr command. This results in inconsistent command syntax and overlap of functionality, not to mention confusion.&lt;/p&gt;
&lt;h4 id="string-operations"&gt;String Operations&lt;a class="anchor" href="#string-operations"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Expression&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;${#string}&lt;/td&gt;
					&lt;td&gt;Length of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string:position}&lt;/td&gt;
					&lt;td&gt;Extract substring from $string at $position&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string:position:length}&lt;/td&gt;
					&lt;td&gt;Extract $length characters substring from $string at $position [zero-indexed,&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string#substring}&lt;/td&gt;
					&lt;td&gt;Strip shortest match of $substring from front of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string##substring}&lt;/td&gt;
					&lt;td&gt;Strip longest match of $substring from front of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string%substring}&lt;/td&gt;
					&lt;td&gt;Strip shortest match of $substring from back of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string%%substring}&lt;/td&gt;
					&lt;td&gt;Strip longest match of $substring from back of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string/substring/replacement}&lt;/td&gt;
					&lt;td&gt;Replace first match of $substring with $replacement&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string//substring/replacement}&lt;/td&gt;
					&lt;td&gt;Replace all matches of $substring with $replacement&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string/#substring/replacement}&lt;/td&gt;
					&lt;td&gt;If $substring matches front end of $string, substitute $replacement for $substring&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${string/%substring/replacement}&lt;/td&gt;
					&lt;td&gt;If $substring matches back end of $string, substitute $replacement for $substring&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr match &amp;ldquo;$string&amp;rdquo; &amp;lsquo;$substring&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Length of matching $substring* at beginning of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr &amp;ldquo;$string&amp;rdquo; : &amp;lsquo;$substring&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Length of matching $substring* at beginning of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr index &amp;ldquo;$string&amp;rdquo; $substring&lt;/td&gt;
					&lt;td&gt;Numerical position in $string of first character in $substring* that matches [0 if no match, first character counts as position 1]&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr substr $string $position $length&lt;/td&gt;
					&lt;td&gt;Extract$length characters from $string starting at $position [0 if&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr match &amp;ldquo;$string&amp;rdquo; &amp;lsquo;($substring)&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Extract$substring*, searching from beginning of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr &amp;ldquo;$string&amp;rdquo; : &amp;lsquo;($substring)&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Extract$substring* , searching from beginning of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr match &amp;ldquo;$string&amp;rdquo; &amp;lsquo;.*($substring)&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Extract$substring*, searching from end of $string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;expr &amp;ldquo;$string&amp;rdquo; : &amp;lsquo;.*($substring)&amp;rsquo;&lt;/td&gt;
					&lt;td&gt;Extract$substring*, searching from end of $string&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="parameter-substitution-and-expansion"&gt;Parameter Substitution and Expansion&lt;a class="anchor" href="#parameter-substitution-and-expansion"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Expression&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;${var}&lt;/td&gt;
					&lt;td&gt;Value of var (same as $var)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var-$DEFAULT}&lt;/td&gt;
					&lt;td&gt;If var not set, evaluate expression as $DEFAULT *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var:-$DEFAULT}&lt;/td&gt;
					&lt;td&gt;If var not set or is empty, evaluate expression as $DEFAULT *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var=$DEFAULT}&lt;/td&gt;
					&lt;td&gt;If var not set, evaluate expression as $DEFAULT *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var:=$DEFAULT}&lt;/td&gt;
					&lt;td&gt;If var not set or is empty, evaluate expression as $DEFAULT *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var+$OTHER}&lt;/td&gt;
					&lt;td&gt;If var set, evaluate expression as $OTHER, otherwise as null string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var:+$OTHER}&lt;/td&gt;
					&lt;td&gt;If var set, evaluate expression as $OTHER, otherwise as null string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var?$ERR_MSG}&lt;/td&gt;
					&lt;td&gt;If var not set, print $ERR_MSG and abort script with an exit status of 1.*&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${var:?$ERR_MSG}&lt;/td&gt;
					&lt;td&gt;If var not set, print $ERR_MSG and abort script with an exit status of 1.*&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${!varprefix*}&lt;/td&gt;
					&lt;td&gt;Matches all previously declared variables beginning with varprefix&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;${!varprefix@}&lt;/td&gt;
					&lt;td&gt;Matches all previously declared variables beginning with varprefix&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="samples"&gt;Samples&lt;a class="anchor" href="#samples"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Replace file name from abc_noteN to abc_N&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;touch abc_note1 abc_note2 abc_note3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; f in &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;find . -type f -name *abc_note*&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;do&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv -- &lt;span style="color:#953800"&gt;$f&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;//note&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;done&lt;/span&gt; &lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ls abc*
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# expected output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# abc_1 abc_2 abc_3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Adv Bash - 3</title><link>https://harryho.github.io/coding/shell/bash-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/bash-note-3/</guid><description>&lt;h3 id="operators-files"&gt;Operators: Files&lt;a class="anchor" href="#operators-files"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;Operator&lt;/th&gt;
					&lt;th&gt;Tests Whether&lt;/th&gt;
					&lt;th&gt;Operator&lt;/th&gt;
					&lt;th&gt;Tests Whether&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-e&lt;/td&gt;
					&lt;td&gt;File exists&lt;/td&gt;
					&lt;td&gt;-s&lt;/td&gt;
					&lt;td&gt;File is not zero size&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-f&lt;/td&gt;
					&lt;td&gt;File is a regular file&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-d&lt;/td&gt;
					&lt;td&gt;File is a directory&lt;/td&gt;
					&lt;td&gt;-r&lt;/td&gt;
					&lt;td&gt;File has read permission&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-h&lt;/td&gt;
					&lt;td&gt;File is a symbolic link&lt;/td&gt;
					&lt;td&gt;-w&lt;/td&gt;
					&lt;td&gt;File has write permission&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-L&lt;/td&gt;
					&lt;td&gt;File is a symbolic link&lt;/td&gt;
					&lt;td&gt;-x&lt;/td&gt;
					&lt;td&gt;File has execute permission&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-b&lt;/td&gt;
					&lt;td&gt;File is a block device&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-c&lt;/td&gt;
					&lt;td&gt;File is a character device&lt;/td&gt;
					&lt;td&gt;-g&lt;/td&gt;
					&lt;td&gt;sgid flag set&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-p&lt;/td&gt;
					&lt;td&gt;File is a pipe&lt;/td&gt;
					&lt;td&gt;-u&lt;/td&gt;
					&lt;td&gt;suid flag set&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-S&lt;/td&gt;
					&lt;td&gt;File is a socket&lt;/td&gt;
					&lt;td&gt;-k&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;sticky bit&amp;rdquo; set&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-t&lt;/td&gt;
					&lt;td&gt;File is associated with a terminal&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-N&lt;/td&gt;
					&lt;td&gt;File modified since it was last read&lt;/td&gt;
					&lt;td&gt;F1 -nt F2&lt;/td&gt;
					&lt;td&gt;File F1 is newer than F2 *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-O&lt;/td&gt;
					&lt;td&gt;You own the file&lt;/td&gt;
					&lt;td&gt;F1 -ot F2&lt;/td&gt;
					&lt;td&gt;File F1 is older than F2 *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;-G&lt;/td&gt;
					&lt;td&gt;Group id of file same as yours&lt;/td&gt;
					&lt;td&gt;F1 -ef F2&lt;/td&gt;
					&lt;td&gt;Files F1 and F2 are hard links to the same file *&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;!&lt;/td&gt;
					&lt;td&gt;NOT (inverts sense of above tests)&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sample"&gt;Sample&lt;a class="anchor" href="#sample"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;
function is_symbolic_link(){
 echo &amp;#34;Is the file $1 a symbolic link?&amp;#34;;

 if [ -f $1 ] &amp;amp;&amp;amp; [ -h $1 ]; 
 then
 echo &amp;#39;true&amp;#39; ; 
 else 
 echo &amp;#39;false&amp;#39;; 
 fi;
}

function is_file_empty () {

 echo &amp;#34;Is the file $1 empty?&amp;#34;;

 if [ -f $1 ] &amp;amp;&amp;amp; [ ! -s $1 ]; 
 then
 echo &amp;#39;true&amp;#39; ; 
 else 
 echo &amp;#39;false&amp;#39;; 
 fi;
}&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>C Lecture - 1</title><link>https://harryho.github.io/coding/c/lcthw-lectures.1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c/lcthw-lectures.1/</guid><description>&lt;p&gt;Author: Zed A. Shaw&lt;/p&gt;
&lt;p&gt;All content comes from Zed&amp;rsquo;s &lt;a href="https://github.com/zedshaw/learn-c-the-hard-way-lectures.git"&gt;Lecture Repository&lt;/a&gt; and &lt;a href="https://github.com/zedshaw/liblcthw"&gt;Libraries Repository&lt;/a&gt;. All credit goes to Zed.&lt;/p&gt;
&lt;h3 id="exercise-0-installing-software"&gt;Exercise 0 Installing Software&lt;a class="anchor" href="#exercise-0-installing-software"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Plan&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install software on your system.&lt;/li&gt;
&lt;li&gt;Test that it works right.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux Install&lt;/p&gt;
&lt;p&gt;On Debian/Ubuntu use:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo apt-get install build-essential
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On RedHat/CentOS:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo yum groupinstall development-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux Testing&lt;/p&gt;
&lt;p&gt;Test that your C compiler works with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cc --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OSX Install&lt;/p&gt;
&lt;p&gt;Install &lt;a href="https://developer.apple.com/xcode/"&gt;XCode&lt;/a&gt;, this will take a while.&lt;/p&gt;</description></item><item><title>C Lecture - 2</title><link>https://harryho.github.io/coding/c/lcthw-lectures.2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c/lcthw-lectures.2/</guid><description>&lt;p&gt;Author: Zed A. Shaw&lt;/p&gt;
&lt;p&gt;All content comes from Zed&amp;rsquo;s &lt;a href="https://github.com/zedshaw/learn-c-the-hard-way-lectures.git"&gt;Lecture Repository&lt;/a&gt; and &lt;a href="https://github.com/zedshaw/liblcthw"&gt;Libraries Repository&lt;/a&gt;. All credit goes to Zed.&lt;/p&gt;
&lt;h3 id="exercise-32-double-linked-lists"&gt;Exercise 32 Double Linked Lists&lt;a class="anchor" href="#exercise-32-double-linked-lists"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Plan&lt;/p&gt;
&lt;p&gt;Learn about your very first data structure:&lt;/p&gt;
&lt;p&gt;Double Linked Lists&lt;/p&gt;
&lt;p&gt;Creating A liblcthw Project&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll need a project for the rest of the book called &lt;em&gt;liblcthw&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Algorithms and Data Structures&lt;/p&gt;
&lt;p&gt;A big step in going from amateur to professional is learning
about data structures and algorithms.&lt;/p&gt;</description></item><item><title>C Lecture - 3</title><link>https://harryho.github.io/coding/c/lcthw-lectures.3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c/lcthw-lectures.3/</guid><description>&lt;p&gt;Author: Zed A. Shaw&lt;/p&gt;
&lt;p&gt;All content comes from Zed&amp;rsquo;s &lt;a href="https://github.com/zedshaw/learn-c-the-hard-way-lectures.git"&gt;Lecture Repository&lt;/a&gt; and &lt;a href="https://github.com/zedshaw/liblcthw"&gt;Libraries Repository&lt;/a&gt;. All credit goes to Zed.&lt;/p&gt;
&lt;h3 id="exercise-41-project-devpkg"&gt;Exercise 41 Project devpkg&lt;a class="anchor" href="#exercise-41-project-devpkg"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;.\ex41\devpkg&lt;/p&gt;
&lt;p&gt;.\ex41\devpkg\commands.c&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;apr_uri.h&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;apr_fnmatch.h&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;commands.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;dbg.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;bstrlib.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;db.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;shell.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_depends&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;apr_pool_t&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FILE &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;in &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bstring line &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; in &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;fopen&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;in &lt;span style="color:#0550ae"&gt;!=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to open downloaded depends: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; path&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bgets&lt;/span&gt;&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;bNgetc&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; fgetc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; in&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; line &lt;span style="color:#0550ae"&gt;!=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; line &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bgets&lt;/span&gt;&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;bNgetc&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; fgetc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; in&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;btrimws&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;log_info&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Processing depends: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bdata&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_install&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bdata&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to install: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bdata&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bdestroy&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;fclose&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;in&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#900;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#6639ba"&gt;bdestroy&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;line&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;in&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#6639ba"&gt;fclose&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;in&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_fetch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;apr_pool_t&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; fetch_only&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;apr_uri_t&lt;/span&gt; info &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;port &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;depends_file &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;apr_status_t&lt;/span&gt; rv &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;apr_uri_parse&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rv &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to parse URL: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;apr_fnmatch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;GIT_PAT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;GIT_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;git failed.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;apr_fnmatch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;DEPEND_PAT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;!&lt;/span&gt;fetch_only&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;No point in fetching a DEPENDS file.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;scheme&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; depends_file &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; DEPENDS_PATH&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CURL_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;TARGET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; depends_file&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Curl failed.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; depends_file &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// recursively process the devpkg list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;log_info&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Building according to DEPENDS: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rv &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_depends&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; depends_file&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rv &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to process the DEPENDS: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// this indicates that nothing needs to be done
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;apr_fnmatch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;TAR_GZ_PAT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;scheme&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CURL_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;TARGET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_GZ_SRC&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to curl source: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rv &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;apr_dir_make_recursive&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;BUILD_DIR&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; APR_UREAD &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; APR_UWRITE &lt;span style="color:#0550ae"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; APR_UEXECUTE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rv &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to make directory %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; BUILD_DIR&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;TAR_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;FILE&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_GZ_SRC&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to untar %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_GZ_SRC&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;apr_fnmatch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;TAR_BZ2_PAT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; APR_SUCCESS&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;info&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;scheme&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CURL_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;TARGET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_BZ2_SRC&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Curl failed.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;apr_status_t&lt;/span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;apr_dir_make_recursive&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;BUILD_DIR&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; APR_UREAD &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; APR_UWRITE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; APR_UEXECUTE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to make directory %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; BUILD_DIR&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;TAR_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;FILE&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_BZ2_SRC&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to untar %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; TAR_BZ2_SRC&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;sentinel&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Don&amp;#39;t now how to handle %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// indicates that an install needs to actually run
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#900;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_build&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;apr_pool_t&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;configure_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;make_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;install_opts&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;access&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;BUILD_DIR&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; X_OK &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; R_OK &lt;span style="color:#0550ae"&gt;|&lt;/span&gt; W_OK&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Build directory doesn&amp;#39;t exist: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; BUILD_DIR&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// actually do an install
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;access&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CONFIG_SCRIPT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; X_OK&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;log_info&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Has a configure script, running it.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CONFIGURE_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;OPTS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; configure_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to configure.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;MAKE_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;OPTS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; make_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to build.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;INSTALL_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;TARGET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; install_opts &lt;span style="color:#0550ae"&gt;?&lt;/span&gt; &lt;span style="color:#900;font-weight:bold"&gt;install_opts&lt;/span&gt; &lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;install&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to install.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CLEANUP_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to cleanup after build.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;DB_update&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to add this package to the database.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#900;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_install&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;apr_pool_t&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;configure_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;make_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;install_opts&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CLEANUP_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to cleanup before building.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;DB_find&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;!=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Error checking the install database.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;log_info&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Package %s already installed.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_fetch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rc &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Command_build&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; configure_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; make_opts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; install_opts&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;check&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Failed to build: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rc &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// no install needed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;log_info&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Depends successfully installed: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;// had an error
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;sentinel&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Install failed: %s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; url&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CLEANUP_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#900;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;Shell_exec&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;CLEANUP_SH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;.\ex41\devpkg\commands.h&lt;/p&gt;</description></item><item><title>C Lecture - 4</title><link>https://harryho.github.io/coding/c/lcthw-lectures.4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c/lcthw-lectures.4/</guid><description>&lt;p&gt;Author: Zed A. Shaw&lt;/p&gt;
&lt;p&gt;All content comes from Zed&amp;rsquo;s &lt;a href="https://github.com/zedshaw/learn-c-the-hard-way-lectures.git"&gt;Lecture Repository&lt;/a&gt; and &lt;a href="https://github.com/zedshaw/liblcthw"&gt;Libraries Repository&lt;/a&gt;. All credit goes to Zed.&lt;/p&gt;
&lt;h3 id="exercise-48a-a-simple-network-server"&gt;Exercise 48a A Simple Network Server:&lt;a class="anchor" href="#exercise-48a-a-simple-network-server"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Project Description&lt;/p&gt;
&lt;p&gt;The Plan&lt;/p&gt;
&lt;p&gt;Start your first long running project:&lt;/p&gt;
&lt;p&gt;statserve&lt;/p&gt;
&lt;p&gt;The Purpose&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll get the project started and get a minimum first hack going.&lt;/p&gt;
&lt;p&gt;The Requirements&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a simple network server that accepts a connection on port 7899 from
&lt;em&gt;netclient&lt;/em&gt; or the &lt;em&gt;nc&lt;/em&gt; command, and echoes back anything you type.&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;ll need to learn how to bind a port, listen on the socket, and answer it.
Use your research skills to study how this is done and attempt to implement it
yourself.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Requirements&lt;/p&gt;</description></item><item><title>Cassandra Practices</title><link>https://harryho.github.io/hacks/cass-note/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/hacks/cass-note/</guid><description>&lt;p&gt;&lt;em&gt;Apache Cassandra is a free open-source database system that is NoSQL based. Meaning Cassandra does not use the table model seen in MySQL, MSSQL or PostgreSQL, but instead uses a cluster model. It’s designed to handle large amounts of data and is highly scalable.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="install-cassandra-on-ubuntu"&gt;Install Cassandra on Ubuntu&lt;a class="anchor" href="#install-cassandra-on-ubuntu"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="install-javajre-8"&gt;Install Java(JRE) 8+&lt;a class="anchor" href="#install-javajre-8"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo add-apt-repository ppa:webupd8team/java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install oracle-java8-set-default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install-python-27"&gt;Install Python 2.7+&lt;a class="anchor" href="#install-python-27"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install python
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-cassandra"&gt;Install Cassandra&lt;a class="anchor" href="#install-cassandra"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;First, we have to add Cassandra repository to source list by running following command. The &lt;code&gt;39x&lt;/code&gt; is the version. Use 40x if Cassandra 4.0 is the newest version:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;deb http://www.apache.org/dist/cassandra/debian 39x main&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Next, run the cURL command to add the repository keys :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl https://www.apache.org/dist/cassandra/KEYS &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-key add -&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;We can now update the repositories and install Cassandra:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install cassandra
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# optional - It works on MacBook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Check Cassandra status&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nodetool status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-cassandra-with-docker"&gt;Install Cassandra with Docker&lt;a class="anchor" href="#install-cassandra-with-docker"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="create-node-n1"&gt;Create node n1&lt;a class="anchor" href="#create-node-n1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run --name n1 -d tobert/cassandra -dc DC1 -rack RAC1
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="get-ip-of-node-n1"&gt;Get IP of node n1&lt;a class="anchor" href="#get-ip-of-node-n1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;IP=`docker inspect -f '{{ .NetworkSettings.IPAddress }}' n1`
echo $IP
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="check-status-of-n1"&gt;Check status of n1&lt;a class="anchor" href="#check-status-of-n1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 nodetool status

# You will see status of Datacenter D1 below

# Datacenter: DC1
# ===============
# Status=Up/Down
# |/ State=Normal/Leaving/Joining/Moving
# -- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.2 51.53 KB 256 100.0% 8965869d-cae8-41a6-bf19-ff69c2605c6c RAC1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="create-node-n2-on-rack-rac2"&gt;Create node n2 on rack RAC2&lt;a class="anchor" href="#create-node-n2-on-rack-rac2"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run --name=n2 -d tobert/cassandra -dc DC1 -rack RAC2 --seeds $IP

docker exec -it n1 nodetool status

# You will see status of Datacenter D1 below

# Datacenter: DC1
# ===============
# Status=Up/Down
# |/ State=Normal/Leaving/Joining/Moving
# -- Address Load Tokens Owns (effective) Host ID Rack
# UN 172.17.0.3 72.01 KB 256 100.0% cfa002b0-350c-41b8-9f86-eb8978a43b26 RAC2
# UN 172.17.0.2 51.53 KB 256 100.0% 8965869d-cae8-41a6-bf19-ff69c2605c6c RAC1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="check-node-n2-configuration"&gt;Check node n2 configuration&lt;a class="anchor" href="#check-node-n2-configuration"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n2 cat /data/conf/cassandra.yaml | grep endpoint
docker exec -it n2 cat /data/conf/cassandra-rackdc.properties | grep -e &amp;quot;dc&amp;quot; -e &amp;quot;rack&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="create-node-n3-on-datacenter-d2-and-rack-rac1"&gt;Create node n3 on Datacenter D2 and rack RAC1&lt;a class="anchor" href="#create-node-n3-on-datacenter-d2-and-rack-rac1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run --name=n3 -d tobert/cassandra -dc DC2 -rack RAC1 --seeds $IP
docker exec -it n1 nodetool status

# You will see status below. It may take a few seconds to get everything up and run.

# Datacenter: DC1
# ===============
# Status=Up/Down
# |/ State=Normal/Leaving/Joining/Moving
# -- Address Load Tokens Owns (effective) Host ID Rack
# UN 172.17.0.3 134.03 KB 256 66.1% cfa002b0-350c-41b8-9f86-eb8978a43b26 RAC2
# UN 172.17.0.2 102.84 KB 256 64.5% 8965869d-cae8-41a6-bf19-ff69c2605c6c RAC1

# Datacenter: DC2
# ===============
# Status=Up/Down
# |/ State=Normal/Leaving/Joining/Moving
# -- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.4 14.38 KB 256 69.4% 0fad8335-763d-42fa-9934-3ed10c44eaa8 RAC1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="setup-replication-strategy"&gt;Setup replication strategy&lt;a class="anchor" href="#setup-replication-strategy"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker 
create keyspace csdb with replication = {'class':'NetworkTopologyStrategy','DC1':2,'DC2':1}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="check-csdb-status"&gt;Check csdb status&lt;a class="anchor" href="#check-csdb-status"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 nodetool describering csdb

# Run nodetool status and note that the one node in DC2 owns all the data
docker exec -it n1 nodetool status csdb 

# Stop and remove all four docker containers:
docker stop n1 n2 n3 n4; docker rm n1 n2 n3 n4
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="create-single-datacenter-with-3-nodes"&gt;Create single Datacenter with 3 nodes&lt;a class="anchor" href="#create-single-datacenter-with-3-nodes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="create-3-nodes-with-local-mounted-directory"&gt;Create 3 nodes with local mounted directory&lt;a class="anchor" href="#create-3-nodes-with-local-mounted-directory"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run --name=n1 -v $PWD/ws/ps/cassdev/scripts:/scripts -d tobert/cassandra
docker exec -it n1 nodetool status

IP=`docker inspect -f '{{ .NetworkSettings.IPAddress }}' n1`
echo $IP

docker run --name=n2 -d tobert/cassandra --seeds $IP
docker run --name=n3 -d tobert/cassandra --seeds $IP

docker exec -it n1 /bin/bash
cd scripts
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="list-scripts"&gt;List scripts&lt;a class="anchor" href="#list-scripts"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 /bin/bash
cd /scrpts &amp;amp;&amp;amp; ls
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="create-keyspace-with-simple-replication"&gt;Create keyspace with simple replication&lt;a class="anchor" href="#create-keyspace-with-simple-replication"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 cqlsh
create keyspace csdb with replication = 
{'class':'SimpleStrategy', 'replication_factor':1};
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="create-table-and-insert-data-with-script"&gt;Create table and insert data with script&lt;a class="anchor" href="#create-table-and-insert-data-with-script"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 cqlsh

&amp;gt; desc keyspaces;
&amp;gt; desc tables;
&amp;gt; use ussdb;
&amp;gt; source '/scripts/courses.cql'
&amp;gt; source '/scripts/users.cql'
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="cql"&gt;CQL&lt;a class="anchor" href="#cql"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it n1 cqlsh

&amp;gt; use ussdb;
&amp;gt; desc tables;
&amp;gt; select * from users;
&amp;gt; select * from courses;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="troubleshoot"&gt;Troubleshoot&lt;a class="anchor" href="#troubleshoot"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Connection error&lt;/p&gt;</description></item><item><title>Cron Job Note - 1</title><link>https://harryho.github.io/coding/shell/cron-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/cron-note-1/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;a class="anchor" href="#introduction"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cron job is one of most common techniques used on every Unix / Linux.&lt;/p&gt;
&lt;h2 id="common-use-cases"&gt;Common Use Cases&lt;a class="anchor" href="#common-use-cases"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="house-keeping---clean-up-the-backup"&gt;House keeping - Clean up the backup&lt;a class="anchor" href="#house-keeping---clean-up-the-backup"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Run every night to remove the daily backup tar ball&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assumption:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The script file named &lt;code&gt;housekeeping.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The script sits inside folder &lt;code&gt;bin&lt;/code&gt; which is under your user account.&lt;/li&gt;
&lt;li&gt;All backup files have the .tar as extension.&lt;/li&gt;
&lt;li&gt;The script will check the backup tar balls within the folder &lt;code&gt;bacup&lt;/code&gt;, which is under your user account as well.&lt;/li&gt;
&lt;li&gt;The script will remove the latest backup if total backup files are over 5.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cron Job setting -&lt;/p&gt;</description></item><item><title>Cron Job Note - 2</title><link>https://harryho.github.io/coding/shell/cron-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/cron-note-2/</guid><description>&lt;h3 id="refresh-the-database-nosql---cassandra"&gt;Refresh the database (NoSQL) - Cassandra&lt;a class="anchor" href="#refresh-the-database-nosql---cassandra"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;The sample script is used to backup the data from production database and refresh the data to staging or test database. It is not supposed to restore data because of database corruption.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="backup-the-cassandra-database-nightly"&gt;Backup the Cassandra database nightly&lt;a class="anchor" href="#backup-the-cassandra-database-nightly"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;There is a keyspace named &lt;code&gt;hho_ks&lt;/code&gt; in the Cassandra nodes store the production data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Every night the staging Cassandra server will be refreshed with production&amp;rsquo;s snapshot&lt;/p&gt;</description></item><item><title>Debug PHP with Free IDE</title><link>https://harryho.github.io/hacks/php-debug/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/hacks/php-debug/</guid><description>&lt;h2 id="pdt-and-netbeans"&gt;PDT and Netbeans&lt;a class="anchor" href="#pdt-and-netbeans"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;PDT and Netbeans are two most popluar free PHP IDEs. We choose such IDE for productivity, so code intelligence and debug are two key factors, which let us love IDE. Because both are not created for PHP development at the start, there is no built-in server to support the PHP web debug. When we want to use it to debug, we would come across some wierd problems. Here is how to prepare the IDE for PHP debug.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Docker Practices</title><link>https://harryho.github.io/hacks/docker-note/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/hacks/docker-note/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Docker is an open platform for developing, shipping, and running applications. Docker provides the ability to package and run an application in a loosely isolated environment called a container. The isolation and security allow you to run many containers simultaneously on a given host. Containers are lightweight because they don’t need the extra load of a hypervisor, but run directly within the host machine’s kernel. This means you can run more containers on a given hardware combination than if you were using virtual machines. You can even run Docker containers within host machines that are actually virtual machines!&lt;/p&gt;</description></item><item><title>F# Namespace, Module &amp; Import</title><link>https://harryho.github.io/coding/f-sharp/fsharp-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/f-sharp/fsharp-note-2/</guid><description>&lt;h2 id="namespace"&gt;Namespace&lt;a class="anchor" href="#namespace"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;A namespace lets you organize code into areas of related functionality by enabling you to attach a name to a grouping of F# program elements. Namespaces are typically top-level elements in F# files.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Namespaces &lt;strong&gt;cannot&lt;/strong&gt; directly contain values and functions. Instead, values and functions must be included in modules, and modules are included in namespaces. Namespaces can contain types, modules.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fsharp" data-lang="fsharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;namespace&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&lt;span style="color:#cf222e"&gt;rec&lt;/span&gt;&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;parent&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;namespaces&lt;span style="color:#0550ae"&gt;.]&lt;/span&gt;identifier&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="modules"&gt;Modules&lt;a class="anchor" href="#modules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;A module is a grouping of F# code, such as values, types, and function values, in an F# program. Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.&lt;/p&gt;</description></item><item><title>Java Note - 1: Enum</title><link>https://harryho.github.io/coding/java/java-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-1/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;Java 1.5+&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="new-type-enum"&gt;New type: Enum&lt;a class="anchor" href="#new-type-enum"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Enum was a great improvement in Java 1.5. From that more and more developer abandom the interface or abstract class as constant variable container.&lt;/p&gt;
&lt;h3 id="before-java-5"&gt;Before Java 5&lt;a class="anchor" href="#before-java-5"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Before Java 1.5 you will following coding in many Java program.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Use interface or abstract class as constant variable container&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;interface&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Country&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;final&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;AU&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Australian&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;final&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;UK&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;United Kingdom&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;final&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;US&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;United State&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Util&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;getLanguageCode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;country&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#fff"&gt; &lt;/span&gt;languageCode&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;switch&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;country&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Country&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;AU&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;languageCode&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;en-au&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;break&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Country&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;UK&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;languageCode&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;en-uk&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;break&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;case&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Country&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;US&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;languageCode&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;en-us&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;break&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;languageCode&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Above program looks very good. Please take a close look and check it carefully. You will find the program will never return &lt;strong&gt;&lt;em&gt;en-au&lt;/em&gt;&lt;/strong&gt;, since there is a typo in the constant AU. It should be &lt;strong&gt;&lt;em&gt;Australia&lt;/em&gt;&lt;/strong&gt; instead of &lt;strong&gt;&lt;em&gt;Australian&lt;/em&gt;&lt;/strong&gt;. I believe many developers have short sight problem like me, and it happened again and again. Using string as constant flag is not a good option, but there is no other better solution before Java 1.5.&lt;/p&gt;</description></item><item><title>Java Note - 2: Concurrency</title><link>https://harryho.github.io/coding/java/java-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-2/</guid><description>&lt;h2 id="thread"&gt;Thread&lt;a class="anchor" href="#thread"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="join"&gt;Join&lt;a class="anchor" href="#join"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The join method allows one thread to wait for the completion of another. join responds to an interrupt by exiting with an InterruptedException.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Demo code of thread join&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;JoinDemo&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;implements&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Runnable&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;private&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Random&lt;span style="color:#fff"&gt; &lt;/span&gt;rand&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Random&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;currentTimeMillis&lt;/span&gt;&lt;span style="color:#1f2328"&gt;());&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;run&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;//simulate some CPU expensive task&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;100000000&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;rand&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;nextInt&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;[&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Thread&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;currentThread&lt;/span&gt;&lt;span style="color:#1f2328"&gt;().&lt;/span&gt;&lt;span style="color:#1f2328"&gt;getName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;] finished .&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;args&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;throws&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;InterruptedException&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Thread&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Thread&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;5&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;length&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Thread&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;JoinDemo&lt;span style="color:#1f2328"&gt;(),&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;joinThread &amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;start&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;length&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;threads&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;i&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;join&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;[&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Thread&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;currentThread&lt;/span&gt;&lt;span style="color:#1f2328"&gt;().&lt;/span&gt;&lt;span style="color:#1f2328"&gt;getName&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;] All -threads have finished.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="common-problem-of-multithred-program"&gt;Common problem of multithred program&lt;a class="anchor" href="#common-problem-of-multithred-program"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When there are many threads running, the exact sequence in which all running threads are executed depends next to the thread
configuration like priority also on the available CPU resources and the way the scheduler chooses the next thread to execute.
Although the behavior of the scheduler is completely deterministic, it is hard to predict which threads execute in which moment
at a given point in time. This makes access to shared resources critical as it is hard to predict which thread will be the first thread
that tries to access it.&lt;/p&gt;</description></item><item><title>Java Note - 3: Path and Files</title><link>https://harryho.github.io/coding/java/java-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-3/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;Java 7+&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="good-stuff-from-not-shiny-java-7"&gt;Good stuff from not shiny Java 7&lt;a class="anchor" href="#good-stuff-from-not-shiny-java-7"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you are planning to refactor your code, please give a second thought. It is time to dump to try these new features. When the Java 7 was released, I was kind of disappointed without lambda, jigsaw as most developers, but when I tried new Path, Files API, I found that is great improvement. The enhancement of this new IO is really useful. It save so much effort for Java developer.&lt;/p&gt;</description></item><item><title>Java Note - 4: Date Time</title><link>https://harryho.github.io/coding/java/java-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-4/</guid><description>&lt;h2 id="date-time-api"&gt;Date-Time API&lt;a class="anchor" href="#date-time-api"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Through the java.time packages, Java 8 provides a comprehensive Date-Time API to work with date, time, and datetime. By default, most of the classes are based on the ISO-8601 standards. The main classes are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Instant&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;represents an instant on the timeline and it is suitable for machines, for example, as timestamps for event&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LocalDate, LocalTime, LocalDateTime&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;represents human readable date, time, and datetime without a time zone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OffsetTime, OffsetDateTime&lt;/p&gt;</description></item><item><title>Java Note - 5: Lambda</title><link>https://harryho.github.io/coding/java/java-note-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-5/</guid><description>&lt;h2 id="lamda"&gt;Lamda&lt;a class="anchor" href="#lamda"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="lambda-best-practices"&gt;Lambda Best Practices&lt;a class="anchor" href="#lambda-best-practices"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h2 id="use-interfaces"&gt;Use Interfaces&lt;a class="anchor" href="#use-interfaces"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most common misstep taken by an over-eager functional programmer is the use of functional interfaces
in type signatures. In general, you should avoid using the functional interface types directly and instead
provide single-method interfaces as arguments to your methods. These interfaces become a way to create
self-documenting code and to provide meaningful type information, as well as leaving open the opportunity
for your user to provide an actual Java type.&lt;/p&gt;</description></item><item><title>Java Note - 7: Stream API</title><link>https://harryho.github.io/coding/java/java-note-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-7/</guid><description>&lt;h2 id="stream"&gt;Stream&lt;a class="anchor" href="#stream"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="iterations"&gt;Iterations&lt;a class="anchor" href="#iterations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id="collections-and-maps"&gt;Collections and Maps&lt;a class="anchor" href="#collections-and-maps"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h2 id="filtering"&gt;Filtering&lt;a class="anchor" href="#filtering"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mapping"&gt;Mapping&lt;a class="anchor" href="#mapping"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="lambdacollectiondemo"&gt;LambdaCollectionDemo&lt;a class="anchor" href="#lambdacollectiondemo"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id="lambda-collection-map-demo"&gt;Lambda Collection Map Demo&lt;a class="anchor" href="#lambda-collection-map-demo"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;LambdaCollectionMapDemo&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;args&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// FunctionalInterface &lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x + y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#57606a"&gt;// w w w .j av a 2s. c om&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x - y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x * y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x / y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;strArray&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;klm&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;pqr&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;List&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;asList&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Default Methods&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;forEach&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;::&lt;/span&gt;println&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;sort&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;first&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;second&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;first&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;compareToIgnoreCase&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;second&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;asList&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;After sorting ... &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;forEach&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;::&lt;/span&gt;println&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Common Functional Interfaces&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Runnable&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;repeat&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;5&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// UnaryOperator&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UnaryOperator&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;upperCase&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;str&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;str&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;toUpperCase&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// BiUnaryOperator&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;BinaryOperator&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;concat&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;left&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;right&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;left&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;right&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; UnaryOperator upperCase &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;upperCase&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;apply&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; BinaryOperator&amp;lt;String&amp;gt; concat &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;concat&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;apply&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;world&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;private&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;engine&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;Calculator&lt;span style="color:#fff"&gt; &lt;/span&gt;calculator&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;4&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;calculator&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;calculate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;repeat&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;n&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Runnable&lt;span style="color:#fff"&gt; &lt;/span&gt;action&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;n&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;action&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;run&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;@FunctionalInterface&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;interface&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Calculator&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;calculate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Java Note - Part 6: Lambda &amp; Collection</title><link>https://harryho.github.io/coding/java/java-note-6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/java/java-note-6/</guid><description>&lt;h2 id="lambda-and-collection"&gt;Lambda and Collection&lt;a class="anchor" href="#lambda-and-collection"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="iterations"&gt;Iterations&lt;a class="anchor" href="#iterations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id="collections-and-maps"&gt;Collections and Maps&lt;a class="anchor" href="#collections-and-maps"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h2 id="filtering"&gt;Filtering&lt;a class="anchor" href="#filtering"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mapping"&gt;Mapping&lt;a class="anchor" href="#mapping"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="lambdacollectiondemo"&gt;LambdaCollectionDemo&lt;a class="anchor" href="#lambdacollectiondemo"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id="lambda-collection-map-demo"&gt;Lambda Collection Map Demo&lt;a class="anchor" href="#lambda-collection-map-demo"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;LambdaCollectionMapDemo&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;args&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// FunctionalInterface &lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x + y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#57606a"&gt;// w w w .j av a 2s. c om&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x - y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x * y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x / y:&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;engine&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;strArray&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;new&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;String&lt;span style="color:#0550ae"&gt;[]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;klm&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;pqr&amp;#34;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;List&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;asList&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Default Methods&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;forEach&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;::&lt;/span&gt;println&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;sort&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;first&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;second&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;first&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;compareToIgnoreCase&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;second&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Arrays&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;asList&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;strArray&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;After sorting ... &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;list&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;forEach&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;::&lt;/span&gt;println&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Common Functional Interfaces&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// Runnable&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;repeat&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;5&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// UnaryOperator&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UnaryOperator&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;upperCase&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;str&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;str&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;toUpperCase&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#57606a"&gt;// BiUnaryOperator&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;BinaryOperator&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;concat&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;left&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;right&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;left&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;right&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; UnaryOperator upperCase &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;upperCase&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;apply&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;System&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;out&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;println&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; BinaryOperator&amp;lt;String&amp;gt; concat &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;concat&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;apply&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;world&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;private&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;engine&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;Calculator&lt;span style="color:#fff"&gt; &lt;/span&gt;calculator&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;4&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;return&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;calculator&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;calculate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;static&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;void&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;repeat&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;n&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;Runnable&lt;span style="color:#fff"&gt; &lt;/span&gt;action&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;n&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#0550ae"&gt;++&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;action&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;run&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;@FunctionalInterface&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;interface&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Calculator&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;calculate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;y&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>JS &amp; ES Note - 1</title><link>https://harryho.github.io/coding/js-ts/js-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/js-ts/js-note-1/</guid><description>&lt;h2 id="the-most-unpredictable-keyword-and-feature"&gt;The most unpredictable keyword and feature&lt;a class="anchor" href="#the-most-unpredictable-keyword-and-feature"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You may already guessed what I am talking about. Yes, the&lt;strong&gt;this&lt;/strong&gt; keyword. It is not only a powerful feature, but also often misinterpreted keyword.&lt;/p&gt;
&lt;p&gt;In JavaScript, we also have this concept inside a Function constructor when it is invoked using the “new” keyword, however it is not the only rule and “this” can often refer to a different object from a different execution context.&lt;/p&gt;</description></item><item><title>JS &amp; ES Note - 2</title><link>https://harryho.github.io/coding/js-ts/js-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/js-ts/js-note-2/</guid><description>&lt;h2 id="the-equal-operator-doesnt-always-mean-equivalent"&gt;The equal operator doesn&amp;rsquo;t always mean equivalent&lt;a class="anchor" href="#the-equal-operator-doesnt-always-mean-equivalent"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Have you got confused by the equal or not equal expression in the JavaScript? I will say you are definitely not the only one. Even many senior developers come from back-end programming background, they all scratch the head to find out why the equal or not-equal expression doesn&amp;rsquo;t work as they expect. The truth is those expression are really different from other programming language.&lt;/p&gt;</description></item><item><title>JS &amp; ES Note - 3</title><link>https://harryho.github.io/coding/js-ts/js-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/js-ts/js-note-3/</guid><description>&lt;h3 id="the-var-statement"&gt;The &lt;strong&gt;var&lt;/strong&gt; statement&lt;a class="anchor" href="#the-var-statement"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;var declarations, wherever they occur, are processed before any code is executed. This is called hoisting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The scope of a variable declared with var is its current execution context, which is either the enclosing function or, for variables declared outside any function, global. If you re-declare a JavaScript variable, it will not lose its value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assigning a value to an undeclared variable implicitly creates it as a &lt;strong&gt;global&lt;/strong&gt; variable (it becomes a property of the global object) when the assignment is executed.&lt;/p&gt;</description></item><item><title>JS &amp; ES snippet</title><link>https://harryho.github.io/coding/js-ts/js-note-99/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/js-ts/js-note-99/</guid><description>&lt;h3 id="setup-the-global-node-modules"&gt;Setup the global node modules&lt;a class="anchor" href="#setup-the-global-node-modules"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add an environment variable to tell node where the global node module sits&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# I use nvm to manage my node and node modules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;export&lt;/span&gt; &lt;span style="color:#953800"&gt;NODE_PATH&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;${&lt;/span&gt;&lt;span style="color:#953800"&gt;HOME&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;/.nvm/versions/node/&amp;lt;node_version&amp;gt;/lib/node_modules&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you use npm by default, you may have permission problem to access the node modules. I suggest you to set a customized global node module folder under your home directory.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a new folder under your home directory&lt;/li&gt;
&lt;li&gt;Install npm to new global node module&lt;/li&gt;
&lt;li&gt;update environment variables in the profile&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm config &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; prefix &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -g npm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;export NODE_MODULES=$HOME/.node_modules&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.profile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;export PATH=$PATH:$NODE_MODULES/bin&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.profile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;source&lt;/span&gt; &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="parsing-csv-file"&gt;Parsing CSV file&lt;a class="anchor" href="#parsing-csv-file"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="parse-csv-file-with-fast-csv"&gt;Parse csv file with fast-csv&lt;a class="anchor" href="#parse-csv-file-with-fast-csv"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install package fast-csv globally&lt;/p&gt;</description></item><item><title>Kubernetes Cluster in 5min</title><link>https://harryho.github.io/projects/kube-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/projects/kube-cluster/</guid><description>&lt;h2 id="kubernetes"&gt;Kubernetes&lt;a class="anchor" href="#kubernetes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class='book-hint '&gt;
&lt;p&gt;It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="purpose"&gt;Purpose&lt;a class="anchor" href="#purpose"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This project focuses on the training and demonstration. Please DO NOT use it in production environment.&lt;/p&gt;</description></item><item><title>MySql: DDL &amp; DML</title><link>https://harryho.github.io/coding/db-sql/mysql-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mysql-note-2/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;As one of most popular open source databases, MySql is mainly used as data storage, aka database. To store the data into MySql server, we need to use SQL - Structural Query Language. But before we store the data to MySql, we need to define the schema which tells MySql how to organize the data in the proper manner. To define the schema, there is a special set of SQL, which we call it DDL - Data Definition Language, such as, CREATE, DROP, ALTER, etc.&lt;/p&gt;</description></item><item><title>MySql: Getting Started</title><link>https://harryho.github.io/coding/db-sql/mysql-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mysql-note-1/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;MySQL is the world&amp;rsquo;s most popular open source database. Whether you are a fast growing web property, technology ISV or large enterprise, MySQL can cost-effectively help you deliver high performance, scalable database applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="prerequisite"&gt;Prerequisite&lt;a class="anchor" href="#prerequisite"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install MySql 5.6+ on your PC or server&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="launch--stop-mysql-server"&gt;Launch &amp;amp; Stop MySql server&lt;a class="anchor" href="#launch--stop-mysql-server"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# use systemctl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl status mysql.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl restart mysql.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# use service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;service mysql status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;service mysql restart &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="set-root-password"&gt;Set root password&lt;a class="anchor" href="#set-root-password"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="reset-root-password"&gt;Reset root password&lt;a class="anchor" href="#reset-root-password"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- MySql 5.6.x
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;UPDATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;mysql&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#cf222e"&gt;user&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SET&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;password&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;PASSWORD&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;YourNewPassword&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;User&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;Host&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- MySql 5.7+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;UPDATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;mysql&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#cf222e"&gt;user&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SET&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;authentication_string&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;PASSWORD&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;YourNewPassword&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;User&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;Host&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FLUSH&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;PRIVILEGES&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="connect-to-mysql-server"&gt;Connect to MySql server&lt;a class="anchor" href="#connect-to-mysql-server"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql -u &amp;lt;user_name&amp;gt; -p -P &amp;lt;port&amp;gt; -h &amp;lt;host_name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="add-a-new-user"&gt;Add a new user&lt;a class="anchor" href="#add-a-new-user"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;CREATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;USER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;user1&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;IDENTIFIED&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;pass1&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GRANT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ALL&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;PRIVILEGES&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;TO&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;user1&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="delete-a-user"&gt;Delete a user&lt;a class="anchor" href="#delete-a-user"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;REVOKE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ALL&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;PRIVILEGES&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;GRANT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;OPTION&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;user1&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;DROP&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;USER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;user1&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>MySql: JSON</title><link>https://harryho.github.io/coding/db-sql/mysql-note-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mysql-note-5/</guid><description>&lt;h2 id="json-support"&gt;Json support&lt;a class="anchor" href="#json-support"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As of MySQL 5.7.8, MySQL supports a native JSON data type defined by RFC 7159 that enables efficient access to data in JSON (JavaScript Object Notation) documents. The JSON data type provides these advantages over storing JSON-format strings in a string column:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Automatic validation of JSON documents stored in JSON columns. Invalid documents produce an error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optimized storage format. JSON documents stored in JSON columns are converted to an internal format that permits quick read access to document elements. When the server later must read a JSON value stored in this binary format, the value need not be parsed from a text representation. The binary format is structured to enable the server to look up subobjects or nested values directly by key or array index without reading all values before or after them in the document.&lt;/p&gt;</description></item><item><title>MySql: Schema &amp; Metadata</title><link>https://harryho.github.io/coding/db-sql/mysql-note-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mysql-note-4/</guid><description>&lt;h2 id="information-schema"&gt;Information schema&lt;a class="anchor" href="#information-schema"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges. Other terms that are sometimes used for this information are data dictionary and system catalog.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="check-out-table-size"&gt;Check out table size&lt;a class="anchor" href="#check-out-table-size"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SET&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;target_schema&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;THE_TARGET_SCHEMA&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;TABLE_NAME&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;table_rows&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_length&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;index_length&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;round&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;data_length&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;index_length&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Size in GB&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;round&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;data_length&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;index_length&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Size in MB&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;information_schema&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;TABLES&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;table_schema&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;target_schema&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_length&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;DESC&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;LIMIT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;50&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="check-out-running-process"&gt;Check out running process&lt;a class="anchor" href="#check-out-running-process"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SET&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;target_schema&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;THE_TARGET_SCHEMA&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;information_schema&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;PROCESSES&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;command&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Sleep&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;db&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;target_schema&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Another short cut to show all process
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SHOW&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FULL&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;PROCESSLIST&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="get-the-information-of-stored-proc-or-function"&gt;Get the information of stored proc or function&lt;a class="anchor" href="#get-the-information-of-stored-proc-or-function"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SET&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;target_schema&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;THE_TARGET_SCHEMA&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;information_schema&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;ROUTINES&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;routine_schema&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;target_schema&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="optimize-table-after-deletion"&gt;Optimize table after deletion&lt;a class="anchor" href="#optimize-table-after-deletion"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Query the table sorted by data free space
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;table_name&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_length&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_free&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;information_schema&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;table_schema&lt;span style="color:#0550ae"&gt;=@&lt;/span&gt;target_schema&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_free&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_free&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;DESC&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Get table names which need optimization
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;table_name&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;information_schema&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;table_schema&lt;span style="color:#0550ae"&gt;=@&lt;/span&gt;target_schema&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_free&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;data_free&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;DESC&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Optmize table 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;OPTIMIZE&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;TABLE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;XXXXX&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>MySql: SP &amp; Func</title><link>https://harryho.github.io/coding/db-sql/mysql-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mysql-note-3/</guid><description>&lt;h2 id="function---udf"&gt;Function - UDF&lt;a class="anchor" href="#function---udf"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;For the UDF mechanism to work, functions must be written in C or C++ and your operating system must support dynamic loading. MySQL source distributions include a file sql/udf_example.cc that defines five UDF functions. Consult this file to see how UDF calling conventions work. The include/mysql_com.h header file defines UDF-related symbols and data structures, although you need not include this header file directly; it is included by mysql.h.&lt;/p&gt;</description></item><item><title>NeoVim</title><link>https://harryho.github.io/os/neovim/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/os/neovim/</guid><description>&lt;p&gt;&lt;strong&gt;This article will show you how to empower your vi with NeoVim.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="neovim"&gt;NeoVim&lt;a class="anchor" href="#neovim"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;a href="https://github.com/neovim/neovim"&gt;Neovim&lt;/a&gt; is a refactor, and sometimes redactor, in the tradition of Vim (which itself derives from Stevie). It is not a rewrite but a continuation and extension of Vim. Many clones and derivatives exist, some very clever—but none are Vim. Neovim is built for users who want the good parts of Vim, and more.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="install-neovim"&gt;Install Neovim&lt;a class="anchor" href="#install-neovim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Please follow the installation instructions &lt;a href="https://github.com/neovim/neovim/wiki/Installing-Neovim"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PostgresQL Note - 1</title><link>https://harryho.github.io/coding/db-sql/pgsql-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/pgsql-note-1/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="getting-started"&gt;Getting Started&lt;a class="anchor" href="#getting-started"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Switch to user postges&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo su - postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;psql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Create new login id as super admin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is frequently convenient to group users together to ease management of privileges: that way, privileges can be granted to, or revoked from, a group as a whole. In PostgreSQL this is done by creating a role that represents the group, and then granting membership in the group role to individual user roles.&lt;/p&gt;</description></item><item><title>PowerShell 7</title><link>https://harryho.github.io/os/powershell-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/os/powershell-7/</guid><description>&lt;p&gt;&lt;strong&gt;This article will show you how to empower your Windows OS with modern PowerShell &amp;amp; other convenient tools.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="powershell"&gt;PowerShell&lt;a class="anchor" href="#powershell"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;PowerShell is a cross-platform task automation solution made up of a command-line shell, a scripting language, and a configuration management framework. PowerShell runs on Windows, Linux, and macOS.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="powershell-7"&gt;PowerShell 7&lt;a class="anchor" href="#powershell-7"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="differences-between-ps-5-and-ps-7"&gt;Differences between PS 5 and PS 7&lt;a class="anchor" href="#differences-between-ps-5-and-ps-7"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Windows PowerShell 5.1 is built on top of the .NET Framework v4.5. With the release of PowerShell 6.0, PowerShell became an open source project built on .NET Core 2.0. PowerShell 7.0 is built on .NET Core 3.1. And, with the release of PowerShell 7.2, PowerShell will be built on .NET 6.0. Moving from the .NET Framework to .NET Core allowed PowerShell to become a cross-platform solution. PowerShell runs on Windows, macOS, and Linux.&lt;/p&gt;</description></item><item><title>Powershell Note - 1</title><link>https://harryho.github.io/coding/shell/ps-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/shell/ps-note-1/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;PowerShell is a task-based command-line shell and scripting language built on .NET. PowerShell helps system administrators and power-users rapidly automate tasks that manage operating systems (Linux, macOS, and Windows) and processes.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The OS of Windows 7 or later version&lt;/li&gt;
&lt;li&gt;Install Powershell 4 or later version. You can find it on &lt;a href="www.microsoft.com"&gt;Microsoft&lt;/a&gt; website&lt;/li&gt;
&lt;li&gt;Has basic computer knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="launch-ps-command-prompt"&gt;Launch PS command prompt&lt;a class="anchor" href="#launch-ps-command-prompt"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Type command on windows command prompt: &lt;strong&gt;powershell&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="get-ps-version"&gt;Get PS Version&lt;a class="anchor" href="#get-ps-version"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Type &lt;strong&gt;$psversiontable&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; PS C:\&amp;gt;$psversiontable
 ## You might see sth below

 Name Value
 ---- -----
 PSVersion 4.0
 WSManStackVersion 3.0
 SerializationVersion 1.1.0.1
 CLRVersion 4.0.30319.42000
 BuildVersion 6.3.9600.18773
 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
 PSRemotingProtocolVersion 2.2&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="install--uninstall-service"&gt;Install &amp;amp; Uninstall service&lt;a class="anchor" href="#install--uninstall-service"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;#&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Install&lt;/span&gt; &lt;span style="color:#6639ba"&gt;service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;New-Service&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Name&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#34;Your_Service_Name&amp;#34;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-BinaryPathName&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#34;C:\path_to_your_service\your_service.exe&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-k&lt;/span&gt; &lt;span style="color:#6639ba"&gt;netsvcs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;#&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Uninstall&lt;/span&gt; &lt;span style="color:#6639ba"&gt;service&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;(Get-WmiObject -Class Win32_Service -Filter &amp;#34;Name=&amp;#39;Your_Service_Name&amp;#39;&amp;#34;)&lt;/span&gt;&lt;span style="color:#6639ba"&gt;.delete&lt;/span&gt;&lt;span style="color:#0a3069"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="create-new-login--pass"&gt;Create new login &amp;amp; pass&lt;a class="anchor" href="#create-new-login--pass"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;$Username&lt;/span&gt; &lt;span style="color:#6639ba"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#39;domain\username&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;$PassTxt&lt;/span&gt; &lt;span style="color:#6639ba"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#39;your&lt;/span&gt; &lt;span style="color:#6639ba"&gt;secret&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;$Password&lt;/span&gt; &lt;span style="color:#6639ba"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;ConvertTo-SecureString&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-AsPlainText&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$PassTxt&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Force&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set-executionpolicy&lt;/span&gt; &lt;span style="color:#6639ba"&gt;remotesigned;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;New-LocalUser&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$Username&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Password&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$Password&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-FullName&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$Username&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Description&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$Username&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;Add-LocalGroupMember&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Group&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#34;Administrators&amp;#34;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Member&lt;/span&gt; &lt;span style="color:#6639ba"&gt;$Username&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;Add-LocalGroupMember&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Group&lt;/span&gt; &lt;span style="color:#6639ba"&gt;&amp;#34;Remote&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Desktop&lt;/span&gt; &lt;span style="color:#6639ba"&gt;Users&amp;#34;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;-Member&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;$Username&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Python Web Framework</title><link>https://harryho.github.io/frameworks/python-django/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/frameworks/python-django/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="install-python-pip-and-virtualenv"&gt;Install Python, pip and virtualenv&lt;a class="anchor" href="#install-python-pip-and-virtualenv"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Windows: Please find in from Home Page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ubuntu: Please find it from &lt;a href="https://harryho.github.io/os/ubuntu-server-14"&gt;Ubuntu setup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Python 3.4 (released March 2014) and Python 2.7.9 (released December 2014) ship with Pip.&lt;/p&gt;</description></item><item><title>Qemu &amp; Virtual Machine</title><link>https://harryho.github.io/hacks/qemu-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/hacks/qemu-notes/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;What is Qemu ?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.qemu.org/Main_Page"&gt;QEMU&lt;/a&gt; is free and open source. And is licensed under GPL 2. it has the ability to run under both KVM and XEN models (if you enabled virtualization technology from your BIOS first) and offers a lot of options and virtualization options. In this article, we’ll explain how to use QEMU and install it.&lt;/p&gt;
&lt;p&gt;QEMU is a virtualization technology emulator that allows you to run operating systems and Linux distributions easily on your current system without the need to install them or burn their ISO files. It is like VMware or VirtualBox. You can use it at anytime to emulate running any operating system you want on a lot of devices and architecture.&lt;/p&gt;</description></item><item><title>Scheduled task with window service</title><link>https://harryho.github.io/coding/c-sharp/csharp-note-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c-sharp/csharp-note-2/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;a class="anchor" href="#problem"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;Set up the some scheduled tasks running in the backgroud to take care of data update or sync for every 15 mins, or everyday or every week&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="solution"&gt;Solution&lt;a class="anchor" href="#solution"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="option-1"&gt;Option 1&lt;a class="anchor" href="#option-1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h2 id="windows-task-scheduler"&gt;Windows Task Scheduler&lt;a class="anchor" href="#windows-task-scheduler"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Click the Start button.&lt;/li&gt;
&lt;li&gt;Click Control Panel.&lt;/li&gt;
&lt;li&gt;Click System and Maintenance.&lt;/li&gt;
&lt;li&gt;Click Administrative Tools.&lt;/li&gt;
&lt;li&gt;Double-click Task Scheduler.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="option-2"&gt;Option 2&lt;a class="anchor" href="#option-2"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h2 id="use-window-service-as-task-scheduler"&gt;Use Window Service as task scheduler&lt;a class="anchor" href="#use-window-service-as-task-scheduler"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="overview-of-design"&gt;Overview of design&lt;a class="anchor" href="#overview-of-design"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The design here is a simplified version, which I built for previous projects. In the real world, I need to tailor it for different project with different purpose, but fundamental design of architect is the same. IMO, the design below can support most cases, which needs scheduled backgroud task service.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Sql Server Note - 1</title><link>https://harryho.github.io/coding/db-sql/mssql-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/db-sql/mssql-note-1/</guid><description>&lt;h2 id="sql-server"&gt;SQL Server&lt;a class="anchor" href="#sql-server"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Microsoft SQL Server is a relational database management system developed by Microsoft. As a database server, it is a software product with the primary function of storing and retrieving data as requested by other software applications—which may run either on the same computer or on another computer across a network (including the Internet).&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 id="get-dbtable-size-or-space"&gt;Get db/table size or space&lt;a class="anchor" href="#get-dbtable-size-or-space"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Get db size&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Get database size 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;databases&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;CONVERT&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;size&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; MB&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TotalDiskSpaceMB&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;CONVERT&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;size&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39; GB&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TotalDiskSpaceGB&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;databases&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;master_files&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;databases&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;database_id&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;master_files&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;database_id&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GROUP&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;databases&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TotalDiskSpaceMB&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Get database space &amp;amp; unallocated space
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;exec&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_spaceused&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Get table size&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;NAME&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TableName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;s&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;SchemaName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#cf222e"&gt;rows&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;RowCounts&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;total_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TotalSpaceKB&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;CAST&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ROUND&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;total_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#0550ae"&gt;00&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;NUMERIC&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;36&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TotalSpaceMB&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;used_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UsedSpaceKB&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;CAST&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ROUND&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;used_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#0550ae"&gt;00&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;NUMERIC&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;36&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UsedSpaceMB&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;total_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;used_pages&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UnusedSpaceKB&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;CAST&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ROUND&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;total_pages&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;used_pages&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#0550ae"&gt;00&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#6639ba"&gt;NUMERIC&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;36&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UnusedSpaceMB&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;indexes&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;OBJECT_ID&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;partitions&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;OBJECT_ID&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;index_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;index_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;allocation_units&lt;span style="color:#fff"&gt; &lt;/span&gt;a&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;partition_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;a&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;container_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;LEFT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;OUTER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;schemas&lt;span style="color:#fff"&gt; &lt;/span&gt;s&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;schema_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;s&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;schema_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;NAME&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;NOT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;LIKE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;dt%&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;is_ms_shipped&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;OBJECT_ID&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;255&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GROUP&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Name&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;s&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Name&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;p&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#cf222e"&gt;Rows&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;Name&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="get-full-text-search-objects"&gt;Get full text search objects&lt;a class="anchor" href="#get-full-text-search-objects"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SCHEMA_NAME&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tbl&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;schema_id&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;as&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;SchemaName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;tbl&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TableName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_ctlg&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FullTextCatalogName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;UniqueIndexName&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;scols&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;IndexedColumnName&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt; &lt;/span&gt;tbl&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;fulltext_indexes&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;tbl&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;fulltext_index_columns&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx_cols&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx_cols&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;tbl&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;columns&lt;span style="color:#fff"&gt; &lt;/span&gt;scols&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx_cols&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;column_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;scols&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;column_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx_cols&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;scols&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;fulltext_catalogs&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_ctlg&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;fulltext_catalog_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_ctlg&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;fulltext_catalog_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;INNER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;indexes&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;unique_index_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;index_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AND&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;FT_idx&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;i&lt;span style="color:#1f2328"&gt;.[&lt;/span&gt;object_id&lt;span style="color:#1f2328"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="find-the-table"&gt;Find the table&lt;a class="anchor" href="#find-the-table"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Find table by naming pattern&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;distinct&lt;/span&gt;&lt;span style="color:#fff"&gt;	&lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;TableName&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;columns&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;LIKE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%bk%&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TableName&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Find table by colume name&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;ColumnName&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AS&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;TableName&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;columns&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;JOIN&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sys&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;tables&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ON&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;object_id&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;name&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;LIKE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;%MyName%&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;TableName&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;ColumnName&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="restore-user-login-after-db-restore"&gt;Restore user login after db restore&lt;a class="anchor" href="#restore-user-login-after-db-restore"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;EXEC&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_change_users_login&lt;span style="color:#fff"&gt; &lt;/span&gt;Report&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;EXEC&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_change_users_login&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Auto_Fix&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;your_username&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;your_password&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="create-a-new-login"&gt;Create a new login&lt;a class="anchor" href="#create-a-new-login"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;USE&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;master&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;CREATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;LOGIN&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;WITH&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;PASSWORD&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;N&lt;span style="color:#0a3069"&gt;&amp;#39;sql_login_pass&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DEFAULT_DATABASE&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;Your_Database&lt;span style="color:#1f2328"&gt;],&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;CHECK_EXPIRATION&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;OFF&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;CHECK_POLICY&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;OFF&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;USE&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;Your_Database&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;CREATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;USER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FOR&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;LOGIN&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ALTER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;USER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;WITH&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;DEFAULT_SCHEMA&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;CREATE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;SCHEMA&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;AUTHORIZATION&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ALTER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ROLE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;db_datareader&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ADD&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;MEMBER&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ALTER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ROLE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;db_datawriter&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;ADD&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;MEMBER&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sql_user_id&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="get-connection-info"&gt;Get Connection Info&lt;a class="anchor" href="#get-connection-info"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;EXEC&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_who&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;EXEC&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_who&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;@&lt;/span&gt;loginname&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;-- Enhanced verssion
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;EXEC&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;sp_who2&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Thread &amp; Task</title><link>https://harryho.github.io/coding/c-sharp/csharp-note-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/c-sharp/csharp-note-3/</guid><description>&lt;h2 id="c-thread--task"&gt;C# Thread &amp;amp; Task&lt;a class="anchor" href="#c-thread--task"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;From Net 4.0, .Net applicatoin introduced Parallel Framework Extensions (PFx), along the way it delivered an entirely new model for async processing in
.NET. In .NET 4.0 the thread pool queue was redesigned with the new requirements of PFx in mind. Instead of using a simple linked list, the queue was built with arrays of work items with the arrays connected into a linked list.&lt;/p&gt;</description></item><item><title>TS: Basic Types</title><link>https://harryho.github.io/coding/js-ts/ts-note-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/coding/js-ts/ts-note-1/</guid><description>&lt;h2 id="basic-types"&gt;Basic Types&lt;a class="anchor" href="#basic-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In TypeScript, the same types as you would expect in JavaScript are supported, with a convenient enumeration type thrown in to help things along.&lt;/p&gt;
&lt;h3 id="types-in-javascript"&gt;Types in JavaScript&lt;a class="anchor" href="#types-in-javascript"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Boolean - The most basic datatype is the simple true/false value, aka boolean value.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; let isDone: boolean = false;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Number - All numbers in TypeScript are floating point values.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; let decimal: number = 6;
 let hex: number = 0xf00d;
 let binary: number = 0b1010;
 let octal: number = 0o744;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;String - Another fundamental part of creating programs in JavaScript for webpages and servers alike is working with textual data. TypeScript also uses double quotes (&amp;quot;) or single quotes (&amp;rsquo;) to surround string data.&lt;/p&gt;</description></item><item><title>VirtualBox Notes</title><link>https://harryho.github.io/hacks/vbox-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/hacks/vbox-notes/</guid><description>&lt;h2 id="network"&gt;Network&lt;a class="anchor" href="#network"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="not-attached"&gt;Not attached.&lt;a class="anchor" href="#not-attached"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In this mode, Oracle VM VirtualBox reports to the guest that a network card is present, but that there is no connection. This is as if no Ethernet cable was plugged into the card. Using this mode, it is possible to &amp;ldquo;pull&amp;rdquo; the virtual Ethernet cable and disrupt the connection, which can be useful to inform a guest operating system that no network connection is available and enforce a reconfiguration.&lt;/p&gt;</description></item><item><title>Windows Terminal</title><link>https://harryho.github.io/os/windows-terminal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://harryho.github.io/os/windows-terminal/</guid><description>&lt;h3 id="windows-terminal"&gt;Windows Terminal&lt;a class="anchor" href="#windows-terminal"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;The Windows Terminal is a modern, fast, efficient, powerful, and productive terminal application for users of command-line tools and shells like Command Prompt, PowerShell, and WSL. Its main features include multiple tabs, panes, Unicode and UTF-8 character support, a GPU accelerated text rendering engine, and custom themes, styles, and configurations.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h4 id="prerequisite"&gt;Prerequisite&lt;a class="anchor" href="#prerequisite"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;PowerShell 7
&lt;ul&gt;
&lt;li&gt;Install latest PowerShell (version 7.x) from Windows Store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scoop
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://scoop.sh"&gt;Scoop&lt;/a&gt; can be found here or simply execute the command below&lt;/p&gt;</description></item></channel></rss>