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"
}
]

Export and Import AWS DynamoDB data

A simple, straightforward way export and import AWS DynamoDB table’s data with AWS CLI and a few scripts.

At first, export all the data from AWS DynamoDB table:

1
𝜆 aws --profile production dynamodb scan --table-name tile-event > tile-event-export.json

Convert a list of items/records (DynamoDB JSON) into individual PutRequest JSON with jq.

1
𝜆 cat tile-event-export.json | jq '{"Items": [.Items[] | {PutRequest: {Item: .}}]}' > tile-event-import.json

Transform the data if necessary:

1
𝜆 sed 's/tile-images-prod/tile-images-pdev/g' tile-event-import.json > tile-event-import-transformed.json

Split all requests into 25 requests per file, with jq and awk (Note: There are some restriction with AWS DynamoDB batch-write-item request - The BatchWriteItem operation can contain up to 25 individual PutItem and DeleteItem requests and can write up to 16 MB of data. The maximum size of an individual item is 400 KB.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
𝜆 cat tile-event-processed.awk
#!/usr/bin/awk -f

NR%25==1 {
x="tile-event-import-processed-"++i".json";
print "{" > x
print " \"tile-event\": [" > x
}
{
printf " %s", $0 > x;
}
NR%25!=0 {
print "," > x
}
NR%25==0 {
print "" > x
print " ]" > x
print "}" > x
}

𝜆 jq -c '.Items[]' tile-event-import-transformed.json | ./tile-event-processed.awk

Import all 22 processed JSON files into DynamoDB table:

1
2
3
4
$ for f in tile-event-import-processed-{1..22}.json; do \
echo $f; \
aws --profile development dynamodb batch-write-item --request-items file://$f; \
done

Get and read logs from AWS CloudWatch with saw

For all the people painfully read logs on AWS CloudWatch console, saw is your friend.

Get CloudWatch log groups start with paradise-api:

1
2
𝜆 saw groups --profile ap-prod --prefix paradise-api
paradise-api-CloudFormationLogs-mwwmzgYOtbcB

Get last 2 hours logs for paradise-api from CloudWatch, with saw:

1
𝜆 saw get --profile ap-prod --start -2h paradise-api-CloudFormationLogs-mwwmzgYOtbcB --prefix docker | jq .log | sed 's/\\\n"$//; s/^"//'

Read environment variables of a process in Linux

When try to get the content of any /proc/PID/environ file in more readable format, you can:

1
2
3
4
/proc/[pid]/environ
This file contains the environment for the process. The entries
are separated by null bytes ('\0'), and there may be a null byte
at the end.

A simple way is to apply xargs -0 -L1 -a on it:

  • -0 - read null-delimited lines,
  • -L1 - read one line per execution of command
  • -a - file read lines from file
1
2
3
4
5
6
7
8
9
10
11
12
13
# ps -aef
10101 3629 3589 0 Apr27 ? 00:00:00 /bin/bash bin/start
10101 3670 3629 0 Apr27 ? 00:00:00 /bin/bash bin/start-tomcat
10101 3671 3670 0 Apr27 ? 00:07:36 /usr/lib/jvm/java-11-amazon-corretto.x86_64/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/

# cat /proc/3629/environ
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=27c44e8a5c7cJAVA_HOME=/usr/lib/jvm/java-11-amazon-corretto.x86_64HOME=/usr/local/tomcat

# xargs -0 -L1 -a /proc/3629/environ
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27c44e8a5c7c
JAVA_HOME=/usr/lib/jvm/java-11-amazon-corretto.x86_64
HOME=/usr/local/tomcat