On mac:
- Download the latest release.
- Extract the binary and place it in
/usr/local/bin
.
On mac:
/usr/local/bin
.SpeechSynthesisResult { | |
privResultId: '2C0AD04069BF42C0BB57C946D66665BA', | |
privReason: 10, | |
privErrorDetails: undefined, | |
privProperties: undefined, | |
privAudioData: ArrayBuffer { | |
[Uint8Contents]: <52 49 46 46 f8 25 05 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 01 00 44 ac 00 00 88 58 01 00 02 00 10 00 64 61 74 61 d4 25 05 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 337308 more bytes>, | |
byteLength: 337408 | |
}, | |
privAudioDuration: 38250000 |
Casing: | |
Long: easier to read throug in lists | |
MACRO_CASE: constants, enums | |
kebap-case: file names, paths | |
Short: less characters allow us to fit more meaning; e.g. when we extend or scope an entity (both good practices) the name tends to grow | |
camelCase: variables, function/method names, function/method attributes, GraphQL actions, API I/O, object properties | |
PascalCase for classes and interfaces, cloud infrastructure resource names |
/** | |
* Validator of file extensions | |
*/ | |
export class ExtensionValidator { | |
private readonly detector = new ExtensionDetector(); | |
constructor() { | |
} | |
/** |
/** | |
* Detect file extension from filename | |
* @param filename | |
* @param extension including the dot | |
*/ | |
export class ExtensionDetector { | |
constructor() { | |
} | |
/** |
import {CloudFormation} from "aws-sdk"; | |
import { | |
ListStackResourcesOutput, | |
ListStacksOutput, | |
Stack, | |
StackResourceSummary, | |
StackStatus, | |
StackSummary | |
} from "aws-sdk/clients/cloudformation"; |
// source: https://stackoverflow.com/a/58967523/14569745 | |
openssl genrsa -out key.pem && \ | |
openssl rsa -pubout -in key.pem -out pubkey.pem | |
// Use the content of pubkey.pem as value of PublicKey.PublicKeyConfig.EncodedKey on CloudFront:CreatePublicKey |