Setup ssh ProxyCommand/proxyJump on multiple jump hosts

NOTE: Some SSH Server doesn’t allow public key authentication. Then sshpass is a friend here for you.

Install sshpass in MacOS:

1
$ brew install esolitos/ipa/sshpass

Test sshpass:

1
$ ssh -oProxyCommand="sshpass -f ~/.ssh/windows.passwd ssh -W %h:%p jumphost" -l darling jumphost-npe.paradise.net

Setup .ssh/config file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
## Keeping SSH Sessions Alive
Host *
ServerAliveInterval 15

Host jumphost.mac
Hostname mac.local
IdentityFile ~/.ssh/id_rsa
User darling

Host jumphost.windows
Hostname windows.local
IdentityFile ~/.ssh/id_rsa
User darling

Host jumphost-npe
Hostname jumphost-npe.paradise.net
User darling
IdentityFile ~/.ssh/id_rsa
ProxyCommand sshpass -f ~/.ssh/windows.passwd ssh -W %h:%p jumphost.windows
IdentitiesOnly yes
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
ServerAliveInterval 60
ServerAliveCountMax 5

## DEVELOPMENT hosts in AWS
Host ip-10-212-*.ap-southeast-2.compute.internal
ProxyCommand ssh -W %h:%p jumphost-npe
IdentityFile ~/.ssh/dev-stack.pem

## PTEST hosts in AWS
Host ip-10-213-*.ap-southeast-2.compute.internal
ProxyCommand ssh -W %h:%p jumphost-npe
IdentityFile ~/.ssh/test-stack.pem

## STEST hosts in AWS
Host ip-10-214-*.ap-southeast-2.compute.internal
ProxyCommand ssh -W %h:%p jumphost-npe
IdentityFile ~/.ssh/test-stack.pem

Host jumphost-prod
HostName jumphost-prod.paradise.net
User darling
IdentityFile ~/.ssh/id_rsa.prod
ProxyCommand sshpass -f ~/.ssh/windows.passwd ssh -W %h:%p jumphost.windows
IdentitiesOnly yes
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
ServerAliveInterval 60
ServerAliveCountMax 5

## PROD hosts in AWS
Host ip-10-208-*.ap-southeast-2.compute.internal
ProxyCommand ssh -W %h:%p jumphost-prod
IdentityFile ~/.ssh/prod-ddc-stack.pem

## SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

Micro Frontends

Micro Frontends

Righ model, right tools - the new way of building and collaborating on frontend apps is the core element of Micro Frontends.

Geekbench head to head - Mac vs iPad vs Android

Geekbench head to head - Mac vs iPad vs Android:

  • 10 years old Mac mini Late 2012 (2.6GHz quad-core Intel Core i7 Turbo Boost up to 3.6GHz)
  • 4 years old MacBook Pro 15-inch Mid 2018 (2.6GHz 6-core Intel Core i7, Turbo Boost up to 4.3GHz)
  • 4 years old iPad Pro 11” 2018 3rd gen (A12X Bionic 7 nm, 4-core Vortex at 2.5GHz , 4-core Tempest at 1.6GHz)
  • 1 year old MacBook Pro 16-inch 2021 (Apple Silicon M1 Pro, 10-core CPU at 3.2GHz)
  • 没满岁的 Android (Snapdragon 8 Gen1, 1 core Cortex-X2 at 3GHz, 3-core Cortex-A710 at 2.5GHz, and 4-core Cortex-A510 at 1.8GHz)

Geekbench head to head - Mac vs iPad vs Android

Conclusion:

  1. Intel 已经是江河日下,被时代淘汰
  2. Apple Processors 实在太强。 四年前的处理器还可吊打当前最新的 Snapdragon Processors
  3. 同是 2018 年产品,iPad Pro 把 Intel CPU based 的 MacBook Pro 按在地上碾压

ARM vs x86 谁是未来,一目了然。

NOTE

The Apple M1 chip is built for Macs, and the A15 for phones. They use completely different architectures. The A15 prioritizes battery over performance. The M1 has more firepower for graphics.

How to use Web Inspector and debug Safari on iPhone/iPad

Prerequisites:

  • iPhone / iPad / iPod and the Macbook on the same version of Safari
  • a genuine Apple lightning or USB cable

Step by step:

  • On iPad, iPhone or iPod touch, go to menu Settings > Safari > Advanced and toggle on Web Inspector. Enable JavaScript if it isn’t already on
  • On Macbook, launch Safari and go to menu Preferences > Advanced then toggle on “Show Develop menu in menu bar”
  • Connect iOS device to Macbook with the lightning or USB cable
  • Now on iOS device, open Safari and go to the website you want to debug
  • On Macbook, open Safari and go to “Develop” menu. You now see your iOS device that has connected with Macbook (if no page opened on iOS device, you see a message saying “No Inspectable Applications”)

![Safari Develop menu](/img/Safari Develop.png “Safari Develop menu”)

  • Click on the website in Safari Develop > iOS device menu, Web Inspector window opened, then you can debug as you used to debug in Safari

![Web Inspector](/img/Web Inspector.png “Web Inspector”)

Powerful Zsh

Powerful Zsh

First you have Zsh, next install Oh My Zsh https://ohmyz.sh/

1
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Add Powerlevel10k https://github.com/romkatv/powerlevel10k and configure it

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Set ZSH_THEME to powerlevel10k in .zshrc

1
ZSH_THEME="powerlevel10k/powerlevel10k"

Then run Powerlevel10k configure:

1
p10k configure

Add zsh-autosuggestions https://github.com/zsh-users/zsh-autosuggestions

1
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

Add zsh-syntax-highlighting https://github.com/zsh-users/zsh-syntax-highlighting

1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

and enable them in .zshrc:

1
2
3
4
5
6
...
plugins=(
zsh-autosuggestions
zsh-syntax-highlighting
)
...

Install Fig (deprecated) https://fig.io/, an IDE-style autocomplete but for terminal, and configure in .zshrc

1
2
3
4
5
6
7
...
# Fig pre block. Keep at the top of this file.
[[ -f "$HOME/.fig/shell/zshrc.pre.zsh" ]] && . "$HOME/.fig/shell/zshrc.pre.zsh"
...
# Fig post block. Keep at the bottom of this file.
[[ -f "$HOME/.fig/shell/zshrc.post.zsh" ]] && . "$HOME/.fig/shell/zshrc.post.zsh"
...

References

Convert JSON to CSV by using jq

Step by step convert exported JSON data from AWS DynamoDB table into CSV, by using jq.

Export all the data from AWS DynamoDB table at first:

1
𝜆 aws --profile production dynamodb scan --table-name tiles > tiles.json

The exported JSON data looks like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"Items": [
{
"last_modified_date": {
"S": "2021-12-09T01:15:25.335516"
},
"valid_from": {
"S": "2021-12-09T01:00"
},
"created_date": {
"S": "2021-12-09T01:15:25.334965"
},
"status": {
"S": "PUBLISHED"
},
"valid_to": {
"S": "2022-01-31T23:00"
},
"id": {
"S": "b2c60f43-a81c-4363-a68a-dfe7682182d7"
},
"description": {
"S": "Hit the road Jack!"
},
"title": {
"S": "Novated Lease"
}
},
...
],
"Count": 223,
"ScannedCount": 223,
"ConsumedCapacity": null
}

Extract / transform JSON data:

1
2
3
4
5
6
7
8
9
10
11
12
𝜆 cat tiles.json | jq '[.Items[] | { id: .id.S, title: .title.S, description: .description.S, status: .status.S, valid_from: .valid_from.S, valid_to: .valid_to.S }]' > tiles-extracted.json
[
{
"id": "b2c60f43-a81c-4363-a68a-dfe7682182d7",
"title": "Novated Lease",
"description": "Hit the road Jack!",
"status": "PUBLISHED",
"valid_from": "2021-12-09T01:00",
"valid_to": "2022-01-31T23:00"
},
...
]

Convert JSON data into CSV:

1
𝜆 cat tiles-extracted.json | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' > tiles.csv

References

Customise VS Code settings and keybindings with Geddski macros

In IntelliJ IDEA, you can comment a line, the cursor is moved to the next line automatically. This is a very easy way to comment several lines. However, in VS Code, default behaviour is that the cursor stays on the same line.

To copy the behavior of IntelliJ, go with:

  • Install macros author by geddski in VS Code.

  • Edit settings.json and add:

1
2
3
4
5
6
"macros": {
"commentDown": [
"editor.action.commentLine",
"cursorDown"
]
},
  • Edit keybindings.json and add:
1
2
3
4
5
6
7
[
{
"key": "cmd+/",
"command": "macros.commentDown",
"when": "editorTextFocus && !editorReadonly"
}
]