This page looks best with JavaScript enabled

Today I Learned/Thought/Found

 ·  ☕ 3 min read
    🏷️
  • #TIL

我今天所学到的、想到的和遇到的

用命令行将 html 导出为图片

  1. 用 google-chrome
1
google-chrome-stable --headless --disable-gpu --virtual-time-budget=10000 --window-size=3840,2160 --screenshot https://www.google.com

List of Chromium Command Line Switches

  1. 用 wkhtmltoimage
1
wkhtmltoimage --width 1980 --height 1024  --quality 100 --javascript-delay 10000 https://www.google.com google.png

Emacs 将 org-journal-entry 同步到 telegram channel 里

我使用 org-journal 来记录生活,但是 org-journal 是离线的,我创建了个 bot 来将单条 org-journal-entry 同步到 channel里。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
(defun exec/get-org-entry-summary ()
  (interactive)
  (setq urlraw (format 
    "https://api.telegram.org/bot%s/[email protected]%s&text="
    (read-file "/home/vory/.emacs.d/config/tgsync.token")
    (read-file "/home/vory/.emacs.d/config/chatid.priv")
    ))
  (setq urlraw (concat urlraw   (buffer-substring (line-beginning-position) (line-end-position))))

  (message urlraw)
  (setq urlq (url-encode-url urlraw))
  
  (setq url-proxy-services 
  '(("http" . "127.0.0.1:1081")
	("https" . "127.0.0.1:1081"))) 
  (url-retrieve-synchronously urlq)
  (message "sync to telegram channel success"))

茴香豆的茴有几种写法之 VIM 有哪几种退出方式?

  • :wq / ZZ / :x
  • :q! / ZQ

日志里面第一列是 ip, 查询出现次数前 10 的 ip

1
cat xxx.log | awk '{ print $1 }' | sort -n | uniq -c | sort -r -k1 | head 10

grep pdf 文件

ripgrep-all

为 tmux 的 pane 名称设置不同的 emoji 后缀

生活要过的多姿多彩,同样的,我的终端也必须多姿多彩。于是我给 tmux的panel添加了随机的emoji后缀
写一个shell脚本,放进我喜欢的emoji

1
2
3
4
EMOJIS=(😀 😃 😄 😁 😆 😅 🤣 😂 🙂 🙃 😉 😊 😇 🥰 😍 🤩 😘 )
SELECTED_EMOJI=${EMOJIS[$RANDOM % ${#EMOJIS[@]}]};
echo -n $SELECTED_EMOJI

然后在tmux里这样设置pane的名称,:

1
set-option -g automatic-rename-format '#{b:pane_current_path}[#(/home/vory/Dotfiles/tmux/pick.sh)]'

大功告成!

direvent:

GNU direvent - Summary [Puszcza]

OCR 应用: tesseract

有时候身边的同事在排查问题的时候,会从用户那里得到图片形式的hash,为了debug,我本可以手工将图片形式的哈希转化为文本形式的,可是我实在是嫌麻烦,于是玩了下这个从 2006 年开始由Google maintain 的 OCR工具: tesseract-ocr/tesseract

ArchLinux 下所需的包

tesseract

1
> sudo pacman -S tesseract tesseract-data-chi_sim tesseract-data-chi_tra tesseract-data-eng

第一个是主程序,其他的都是由Google训练好的中文和英文模型库。
tesseract 的使用规则是这样的:

1
2
3
4
 tesseract FILE OUTPUTBASE [OPTIONS]... [CONFIGFILE]...
 # If FILE is stdin or - then the standard input is used.
 # If OUTPUTBASE is stdout or - then the standard output is used.

我的使用流程是: 从屏幕上截图,截图会自动保存到粘贴版,然后:

1
xclip -sel clip -target image/png -o | tesseract stdin stdout -l chi_sim -c preserve_interword_spaces=1

如果不加preserve_interword_spaces=1 的话,识别出的结果就会有烦人的空格。

结果很准确,甚至是同时有中文英文和符号的图片都能识别!

使用 sed 获取一个文件位于两个关键词之间的内容

比如:

> cat file.txt
first line :head
second line
third line
apple
forth line
...
tiger
last line
tail
1
2
3
4
5
6
> sed -n '/apple/,/tigger/p'  file.txt
apple
forth line
...
tiger

goland 缺失的功能

我用goland开发公司的项目,很喜欢goland的rename usages of 变量/函数 A to 变量/函数 B的功能,但是我却不能对 import 这么做, 要是想改变整个项目都某一个包的引用,不得不使用 sed:

1
find . -name '*.go' -type f -exec sed -i 's/tg-service/tg-service\/bridge/g' {} ';'

*nix 环境,快速生成大量随机的 leetcode 测试用例

当我在 leetcode做了一道算法题后, 我会先在心里考虑一下输入的边界情况(或者非法输入),时间复杂度(要是数据里过大并且我的算法时间复杂度太差就会 Time Limit Exceed)。

所以我要么手动在 test cases 里手写测试用例, 要么用 linux 下这么几个有用的命令随机生成大量的测试用例:

1
2
3
4
5
6
seq  # print a sequence of numbers

shuf #  generate random permutations

paste #   merge lines of files

用这三个简单的工具, 一般就能生成我想要的测试数据了。
比如我想生成一个数组, 数组的每个元素都是数字,整个数组要是 unsorted:

1

要是想要超大的数据量, 我一般会写到 /tmp/ 里,再配合 xclip 将内容读进到 粘贴板, 最终粘贴到网页里去

https://leetcode.com/problems/combination-sum/solution/

1
2
3

seq 100 | shuf | paste -s -d ,

我喜欢用 printf 配合这些工具输出我想要的格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
> cat gen.sh
N=100
if [[ $# -eq 1 ]];then
    N=$1
fi
for n in $(seq $N) ;
do
    if [[ $(($RANDOM % 3 )) -eq 0 ]];then
        echo $n
    fi
done


> printf "[%s]\n" "$(./gen.sh 365 | paste -s -d , )" 

[3,10,11,18,21,22,32,37,40,44,45,46,48,50,52,53,55,57,61,63,64,65,66,68,69,76,79,90,91,93,95,96,99,100]

> printf "[%s]\n" "$(./gen.sh 365 | paste -s -d , )" | xclip -sel clip 
# 生成随机结果, 并且复制到粘贴板

心中的疑惑

  1. 在终端里快速生成大量随机数的最佳实践是什么?
Share on

EXEC
WRITTEN BY
EXEC
Evil EXEC