Drools 学习笔记之决策表: Guided Decision Table

Column

决策表的列定义。

Ruleflow-Group

A string identifying a rule flow group. In rule flow groups, rules can fire only when the group is activated by the associated rule flow. Example: ruleflow-group "GroupName"

Agenda-Group

A string identifying an agenda group to which you want to assign the rule. Agenda groups allow you to partition the agenda to provide more execution control over groups of rules. Only rules in an agenda group that has acquired a focus are able to be activated. Example: agenda-group "GroupName"

Agenda Groups 是一种分区规则的方法,任何时候只有一组规则拥有 Focus,只有拥有 Focus 焦点的规则才会生效。 agenda-group 默认值 MAIN,类型是 String,可以如下方式定义:

rule "Is of valid age"
agenda-group "GroupA"
when
	Applicant( age < 18 )
	$a : Application()
then
	$a.setValid( false );
	System.out.println("GroupA fired age < 18");
end

Agenda-Group 像栈一样工作,当给定 Group 设置 Focus 时,该 Group 会被放到栈顶。

Metadata column

元数据列,默认情况下元数据列是隐藏的。可以在决策表的列属性中显示。

reference


2019-09-05 drools , kie , guided-decision-table

使用 ripgrep 通过正则快速查找文件内容

ripgrep(简称 rg),是一个用 Rust 实现的命令行搜索工具,可以通过正则来搜索当前的目录。默认情况下 ripgrep 会遵循 .gitignore 的内容,并且自动跳过隐藏的文件目录,以及二进制文件。 ripgrep 原生支持 Windows, MacOS, Linux。ripgrep 和其他流行的搜索工具非常相似,比如 The Silver Searcher, ackgrep.

rg 的优势

目前 Linux 下可用的搜索工具非常多,GNU 中的 grepack-grepThe Silver Searcher 等等,而 rg 的优势在于

  • ripgrep 是真正的快,我在一个有 26G 代码的目录中查找一个方法也可以在几乎秒级的速度找到,所以我经常用来搜索不确定调用关系,但代码又分布在不同项目中时使用
  • ripgrep 遵循 .gitignore,在默认情况下会跳过二进制文件,隐藏的文件目录,不会追踪软链接,更进一步加快了速度
  • ripgrep 支持 Unicode, 可以搜索压缩文件,还可以自己选择正则表达式匹配引擎,比如 PCRE2

Installation

安装的内容直接参考官方页面 即可。

brew install ripgrep

Usage

来看看 rg 的通用格式

USAGE:
	rg [OPTIONS] PATTERN [PATH ...]
	rg [OPTIONS] [-e PATTERN ...] [PATH ...]
	rg [OPTIONS] [-f PATTERNFILE ...] [PATH ...]
	rg [OPTIONS] --files [PATH ...]
	rg [OPTIONS] --type-list
	command | rg [OPTIONS] PATTERN

最不用记忆的就是直接:

rg "keyword"

会显示当前目录下的搜索内容,会打印出文件名关键字出现的行数

和 grep 命令类似,也有三个打印出上下行的选项

  • -A NUM 打印匹配行后面 after N 行
  • -B NUM 打印匹配行前面 before N 行
  • -C NUM 打印匹配行前后 N 行

用正则表达式搜索

使用 -e REGEX 来指定正则表达式

rg -e "*sql" -C2

搜索所有内容包括 gitignore 和隐藏文件

默认 rg 会忽略 .gitignore 和隐藏文件,可以使用 -uu 来查询所有内容:

rg -uu "word" .

显示匹配的次数

使用 -c 来显示匹配的次数:

rg -c "word" .

结果会在文件名后面增加一个次数。

搜索指定的文件类型

可以使用 -t type 来指定文件类型:

rg -t markdown "mysql" .

支持的文件类型可以通过

rg --type-list

来查看。

看到这里,有些读者可能要问假如我要在两个文件类型中查找呢,这个时候 -t 参数就无法满足了,需要引入新的 -g 参数,man rg 看一下 -g 就知道该选项后面跟着一个 GLOB,正则表达式,包括或者去除一些文件或者目录。比如要在 md 文件或者 html 文件中查找 “mysql” 关键字

rg -g "*.{md,html}" "mysql"

注意这里是花括号。

只打印包含匹配内容的文件名

使用 -l 来打印文件名

rg -l -w "word" .

相反的是如果要打印没有匹配内容的文件名

rg --files-without-match -w "word" .

启用大小写敏感

使用 -s 选项来启用大小写敏感

rg -s "word" .

使用 -i 来关闭大小写敏感。

显示不包含关键字的行

使用选项 -v 来显示不包含关键字的行

rg -v "word" .

搜索单词

添加 -w 参数仅显示该单词的内容,该选项等同于在搜索 Pattern 前后加上 \b,这样可以避免因为模糊搜索而导致的不精确。

rg -w "myword" .

比如搜索 abc,可能有些单词包含 dabce ,那么也会被搜索出来,而加上 -w 就不会搜索出来了。

reference

有两个方法查看 rg 使用


2019-09-02 ripgrep , grep , find , ag , rg , search , regex

在 Vim 下使用 fzf

fzf 的介绍看这篇文章,这篇文章主要总结一下 Fzf 在 vim 下面的使用。

安装过程就不再说,安装后 :help fzf 可以查看所有帮助。

fzf-vim 安装之后, :FZF 命令会被添加。

" 在当前目录搜索"
:FZF
" 在 home 目录搜索"
:FZF ~
" fzf 全屏"
:FZF!

插件配置

常用的配置 :help 中都能看到。

" An action can be a reference to a function that processes selected lines
function! s:build_quickfix_list(lines)
  call setqflist(map(copy(a:lines), '{ "filename": v:val }'))
  copen
  cc
endfunction

let g:fzf_action = {
  \ 'ctrl-q': function('s:build_quickfix_list'),
  \ 'ctrl-t': 'tab split',
  \ 'ctrl-x': 'split',
  \ 'ctrl-v': 'vsplit' }

" Default fzf layout
" - down / up / left / right
let g:fzf_layout = { 'down': '~40%' }

let g:fzf_history_dir = '~/.local/share/fzf-history'

Usage

常用命令

在当前目录下查找

Files  :FZF

和 ctrip.vim 类似,使用回车, Ctrl-T, Ctrl-X 或者 Ctrl-V 可以分别在当前窗口,标签页,水平分隔或者垂直分隔窗口中打开。

FZF_DEFAULT_COMMANDFZF_DEFAULT_OPTS 环境变量也会被使用。

Vim 内部 Buffers, Windows 查找

跳转到 Buffer 内的某一行

:Lines

或者是当前 Buffer 内的行

:BLines

查找 Buffers

:Buffers

查找 Windows:

:Windows

查找可用的命令

:Commands

Normal Mode Mappings

:Maps

reference


2019-09-02 fzf , vim , vim-plugins

我的 Linux 环境及 Cinnamon 桌面配置记录

记录一下 Ubuntu 和 Linux Mint 的一些初始化设置,以便于快速恢复自己熟悉的工作环境。当然我更建议日常进行硬盘及文件的快照备份。Linux Mint 下可以是 timeshift 进行文件备份。而如果要对整块硬盘进行迁移和备份,切换到新的机器中,我推荐使用 clonezilla12 来备份与恢复。

桌面环境 Cinnamon

毕竟用了多年 GUI,我至今还没有接受完全的命令行,虽然有人非常推荐用 i3,但是至少在我熟悉目前这一套工作环境前,我还没有去尝试 i3,等某一天真的对目前的桌面非常熟悉了,并且能够希望通过快捷键来加速窗口管理了,我一定会去试试 i3 桌面环境。所以在剩下的桌面环境中,我选择了 Cinnamon。个人觉得是我用过所有桌面中最 User-Friendly 的。

当然如果是 Mint 默认就会选择 Cinnamon,而 Ubuntu 可以使用 PPA 安装:

sudo add-apt-repository ppa:embrosyn/cinnamon && sudo apt update
sudo apt install cinnamon

linux-mint-neofetch

Prerequisite

这篇文章涉及到很多 Debian/Ubuntu/Linux Mint 下关于 /etc/apt/ 配置的内容。所以有必要先了解一下该配置目录。

sources.list

在该目录下有一个 /etc/apt/sources.list 目录,该目录配置了 Ubuntu 官方的软件源,一般可以用国内的镜像 来替换。

其次就是 sources.list.d 配置目录,其中放置了第三方软件源的配置,比如 Google Chrome 的源,Microsoft 的 vscode 软件源,在比如下方可能提到的其他软件源的配置都存放在这里。

save distUpgrade

在这些软件源的配置文件中可能看到 sources.list.savesources.list.distUpgrade 这样的文件,打开文件查看,这些文件和 sources.list 文件差不多。其实这些文件都是一些备份文件。3

  • 在添加一个 repository 后,Ubuntu 会自动生成 .save 文件,以备份之前的配置,如果出现 apt update 时的问题,可以随时回退回去 sudo cp /etc/apt/sources.list.save /etc/apt/sources.list
  • .distUpgrade 文件则是在运行了 dist-upgrade 之后生成的备份文件。

APT

安装必要工具:

sudo apt install vim zsh wget git tree htop fcitx fcitx-rime vlc gimp inkscape shutter filezilla audacity exuberant-ctags iotop iftop nethogs

基础环境配置

基础环境配置,包括日常使用这一台机器需要用到的应用软件,必不可少的组成部分,包括终端,输入法,浏览器等等。

Terminal

guake

下拉式终端,F12 可以让终端无处不在,配合 tmux 基本上也实现了类似 i3 中对终端的管理。

sudo apt install guake

Terminator

日常也会装一个 Terminator,如果有第三块屏幕的话,放着看日志。

sudo add-apt-repository ppa:gnome-terminator
sudo apt-get update
sudo apt-get install terminator

输入法

有一段时间使用搜狗的 linux 版本,没啥大问题,直到有一天开始频繁崩溃 一怒之下换成了 fcitx-rime ,之后彻底的爱上了 Rime.

sudo apt install fcitx fcitx-rime im-config

Rime 配置放到 GitHub 托管。

Browser

Chrome

通过如下方式添加 Google Chrome 的源

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'

Package in this source:

  • google-chrome-stable
  • google-chrome-beta
  • google-chrome-unstable

Vivaldi

Vivaldi 是另一个我长期关注的浏览器,和 Chrome 一样都源自 Chromium,都使用 Blink 渲染引擎,但是 Vivaldi 在界面显示和 UI 交互方面做的太贴心了,原来一直没有的同步功能,也加上了,并且可以直接使用 Chrome Web Store,可以做到无痛切换。

FireFox

一般都默认自带了,但基本上没怎么用。

Syncthing

同步工具,代替了我原来长期使用的 Dropbox

# Add the release PGP keys:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -

# Add the "stable" channel to your APT sources:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

# Update and install syncthing:
sudo apt-get update
sudo apt-get install syncthing

除了 Syncthing,还有 NextCloud 作为备份。

笔记

笔记应用

  • WizNote

字典

GoldenDict

Programming

开发环境配置

Java 开发环境

推荐使用 OpenJDK

sudo apt install openjdk-8-jdk

更多内容参考 OpenJDK 官网,进行手动安装。

安装 Java 9 及以后:

sudo apt install openjdk-11-jdk

如果不想使用 OpenJDK,使用 Oracle JDK:

sudo add-apt-repository ppa:webupd8team/java && sudo apt update
sudo apt install oracle-java8-installer

sudo update-alternatives --config java
sudo update-alternatives --config javac

更加详细的安装 JDK 的方式,可以参考这里

IDE

  • IntelliJ IDEA

JD-GUI

Java Decompiler JD-GUI

Python

直接看这里 Pyenv

Database

MySQL

我使用 MySQL Workbench,虽然有点重,但不影响使用。IntelliJ 自带的 SQL 工具也是很好用的。

Redis

我使用 Redis Desktop Manager 客户端,当然直接用命令行也是可以的。

sudo snap install redis-desktop-manager

SmartGit

使用多年的 Git 客户端,日常命令行即可。

Others

Screenshot

之前都直接使用 Cinnamon 自带的截图工具 desktop-capture,这个工具非常轻便,并且自带截图,录屏,录制 GIF 等等工具,但是唯一的缺点是无法 mark,无法在截图后直接在图片上做标注。所以后来又发现了一款叫做 flameshot 的工具,相辅相成,很舒服。

sudo apt install flameshot

邮件客户端

sudo apt install evolution evolution-ews evolution-indicator evolution-plugins

SNAP

sudo snap install postman telegram-desktop

PDF 阅读器

Cinnamon 自己带这一个简易的 PDF 阅读器,日常使用本身也没有任何问题,不过如果要截取 PDF 内容,尤其是影印的 PDF,就需要 Okular

Best PDF reader ever

sudo snap install okular

下载

Transgui with Tranmission

MultiMedia

多媒体相关包括音视频播放器,解码器,转码,以及媒体信息查看。

Player

Windows 上有 PotPlayer,Linux 上自然也不输。

VLC

播放器 VLC

SMPlayer

SMPlayer 也非常好用。

sudo add-apt-repository ppa:rvm/smplayer
sudo apt-get update
sudo apt-get install smplayer smplayer-themes smplayer-skins

ffmpeg

大名鼎鼎的 ffmpeg 不得不拥有。(LGPL 2.14)

sudo apt install ffmpeg

MediaInfo

MediaInfo 用来查看音视频的各个详细参数,包括音视频编码格式信息,封装类型,字幕等等信息。(BSD 协议下开源 5)

命令安装:

sudo apt install mediainfo

或者安装界面:

Stacer

System Dashboard, Optimizer & Monitor.

stacer linux

Install:

sudo add-apt-repository ppa:oguzhaninan/stacer -y
sudo apt-get update
sudo apt-get install stacer -y

GitHub page:

电子书管理

Calibre

PPA

一些值得一提的 PPA。

sudo add-apt-repository ppa:noobslab/icons
sudo apt install arc-theme


sudo add-apt-repository ppa:noobslab/themes
sudo apt install flatabulous-theme

sudo add-apt-repository ppa:numix/ppa
sudo apt install numix-icon-theme

sudo add-apt-repository ppa:snwh/pulp
sudo apt install paper-icon-theme
# 同时也可以安装 GTK 和 Cursor 主题
sudo apt install paper-gtk-theme
sudo apt install paper-cursor-theme


sudo add-apt-repository ppa:papirus/papirus
sudo apt install papirus-icon-theme


sudo add-apt-repository ppa:atareao/telegram -y
sudo add-apt-repository ppa:atareao/atareao -y

wget https://launchpadlibrarian.net/292068009/indicator-sound-switcher_2.1.1ubuntu0-1_all.deb
wget http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/s/syspeek/syspeek_0.3+bzr26-1~webupd8~zesty_all.deb
wget https://linux.dropbox.com/packages/ubuntu/dropbox_2015.10.28_amd64.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
wget https://jaist.dl.sourceforge.net/project/deadbeef/debian/deadbeef-static_0.7.2-2_amd64.deb

sudo apt install fcitx-module-cloudpinyin gtk2-engines-murrine:i386 libudev1:i386 i965-va-driver vainfo openshot classicmenu-indicator numix-gtk-theme shimmer-themes numix-icon* caffeine leafpad git unity-tweak-tool fcitx-mozc ibus-qt4 curl ctags vim-doc vim-scripts cscope fonts-dejavu indent psensor libluajit-5.1-2 python3-pip  ubuntu-make ppa-purge jayatana compizconfig-settings-manager zsh wget papirus-folders papirus-icon-theme filezilla-theme-papirus exfat-fuse exfat-utils ttf-bitstream-vera -y

WPS

wget http://kdl1.cache.wps.com/ksodl/download/linux/a21//wps-office_10.1.0.5707~a21_amd64.deb wget http://kdl.cc.ksosoft.com/wps-community/download/fonts/wps-office-fonts_1.0_all.deb wget http://kr.archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb sudo dpkg -i wps-office_10.1.0.5707~a21_amd64.deb sudo dpkg -i wps-office-fonts_1.0_all.deb

sudo apt-get install wqy-*
sudo gedit /etc/fonts/conf.avail/69-language-selector-zh-cn.conf

文泉译微米黑字体

sudo apt install fonts-wqy-microhei

sudo vim /usr/share/X11/xorg.conf.d/40-libinput.conf

Option “Tapping” “on” Option “NaturalScrolling” “true” Option “ClickMethod” “clickfinger” Option “DisableWhileTyping” “True”

sudo apt install sassc autoconf automake pkg-config libgtk-3-dev git -y
git clone https://github.com/andreisergiu98/arc-flatabulous-theme && cd arc-flatabulous-theme
./autogen.sh --prefix=/usr --disable-transparency
sudo make install



sudo apt-get install terminator
sudo update-alternatives --config x-terminal-emulator
gsettings set org.gnome.desktop.default-applications.terminal exec 'terminator'


sudo dpkg-reconfigure ca-certificates
sudo apt install shadowsocks-libev simple-obfs
sudo vim /etc/shadowsocks-libev/config.json
sudo vim /lib/systemd/system/shadowsocks-libev.service


sudo apt-get install tlp tlp-rdw tp-smapi-dkms acpi-call-dkms thermald powertop


sudo add-apt-repository ppa:gottcode/gcppa -y
sudo add-apt-repository ppa:nextcloud-devs/client -y
sudo add-apt-repository -u ppa:snwh/ppa -y
sudo add-apt-repository ppa:ubuntuhandbook1/shutter -y
sudo add-apt-repository ppa:kasra-mp/ubuntu-indicator-weather -y
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo add-apt-repository -u ppa:snwh/ppa -k


wget https://launchpadlibrarian.net/292068009/indicator-sound-switcher_2.1.1ubuntu0-1_all.deb
wget http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/s/syspeek/syspeek_0.3+bzr26-1~webupd8~zesty_all.deb
wget https://www.dropbox.com/download?dl=packages/ubuntu/dropbox_2019.01.31_amd64.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
wget https://jaist.dl.sourceforge.net/project/deadbeef/debian/deadbeef-static_0.7.2-2_amd64.deb
wget https://launchpadlibrarian.net/330848294/libgtk2-appindicator-perl_0.15-1build5_amd64.deb

Hi Res 与蓝牙 LDAC

sudo add-apt-repository ppa:eh5/pulseaudio-a2dp -y
sudo apt-get install  pulseaudio-module-bluetooth

sudo vim /etc/pulse/daemon.conf

resample-method = soxr-vhq
default-sample-format = s32le
default-sample-rate = 192000
alternate-sample-rate = 96000

pulseaudio -k
pulseaudio --start

sudo vim /etc/pulse/default.pa

# LDAC Standard Quality
load-module module-bluetooth-discover a2dp_config="ldac_eqmid=sq"

# LDAC High Quality; Force LDAC/PA PCM sample format as Float32LE
#load-module module-bluetooth-discover a2dp_config="ldac_eqmid=hq ldac_fmt=f32"

粘贴板工具

sudo add-apt-repository ppa:hluk/copyq-beta
sudo apt install copyq

Theme

  • flatabulous-theme
  • communitheme

ICON

图标包我非常喜欢的是 Numix 这个系列的图标,特别是其中的 numix-icon-theme-circle。那么就安装 numix-icon-theme-circle 这套图标包了。

Numix-icon-theme-circle

sudoadd-apt-repository ppa:numix/ppa
sudo apt-get update
sudo apt-get install numix-icon-theme-circle

图标包安装好了设置使用上该套图标包还需要使用 Gnome Tweak,安装方法也是通过到 AppStore 中搜索 Gnome Tweak 即可,也可以通过 sudo apt-get install gnome-tweak-tool 来完成安装。由于系统是中文系统,该软件中文名叫做“优化”。

App List

  • 4K Video Downloader 下载工具
  • Anbox 在 Linux 上模拟 Android,可以安装安卓应用
  • Anki 单词记忆
  • Atom 文本编辑器
  • Brasero
  • Bustle
  • Cerebro
  • Character Map 字体工具
  • Charles 抓包工具
  • Cheese
  • Chess
  • Cinnamon Control Center
  • Color
  • Conky
  • Conky Manager
  • CopyQ
  • CroseOver
  • Dropbox
  • Calibre 电子书管理器
  • Electronic Wechat
  • Emojione Picker
  • Evolution
  • Fcitx 输入法
  • Firefox
  • Five or More
  • GHex
  • GIMP
  • GParted
  • GPaste
  • GVim
  • GitKraken
  • Gnote
  • Goldendict**
  • Google Chrome
  • Gpick
  • Guake
  • Hiri
  • Inkscape
  • JD-GUI
  • Joplin
  • KeePassXC
  • Meld
  • MySQL Workbench
  • Nemo
  • NemoVim
  • Netease Cloud Music
  • NextCloud desktop sync client
  • Okular
  • Postman
  • Remmina
  • Rhythmbox
  • Shadowsocks
  • ShotWell
  • Simple Scan
  • Slack
  • SmartGit**
  • Stacer
  • Syncthing
  • SublimeText
  • Teamviewer
  • Telegram
  • Terminator
  • VLC
  • VMware Workstation
  • Vim
  • Visual Studio Code
  • Vivaldi
  • WPS
  • Wireshark
  • Wiznote
  • Zeal
  • Zenmap
  • zsh
  • bmon
  • Calibre
  • haroopad
  • pCloud
  • mpv
  • qBittorent
  • tagspaces
  • Zeal

全局快捷键

快捷键 说明
F12 Guake
Ctrl-c-c GoldenDict 查词
Ctrl-grave Rime 切换输入方案

reference


2019-08-30 ubuntu , linux , linut-mint , cinnamon , ppa , apt

在 Ubuntu 下为 Postman 创建 icon

Postman 早两年就不再更新 Chrome 版本的应用,转而发布 Native app,这个原生的应用非常完美,但唯一的不足就是没有启动 ICON,下载之后就只有一个 tar 包,解压到任意一个文件夹之后就能使用,但是在桌面上,或者启动器中是无法找到该应用的。

和之前说过的给 Wiznote 一样,可以使用 gnome 提供的工具来给 Postman 也提供一个 ICON

gnome-desktop-item-edit ~/.local/share/applications --create-new

然后填入应用图标,路径,等等就可以。然后去该目录下查看就能看到已经创建了一个 Postman.desktop 文件,当然你也可以手动创建该文件。

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Postman
Icon=postman.png
Path=/home/[your username]/Postman
Exec=/home/[your username]/Postman/Postman
StartupNotify=false
StartupWMClass=Postman

如果只想要展示在 Unity;GNOME 下可以配置:

OnlyShowIn=Unity;GNOME;
X-UnityGenerated=true

系统主题的大部分图标在该目录下:

/usr/share/icons/

reference


2019-08-30 ubuntu , linux-mint , wiznote , postman , icon , launcher

NTSC 和 PAL

之前折腾相机,剪视频的时候遇到这两个标准制式,就一直在待办事项中,这里就简单的记录一下。

制式

NTSC

NTSC 是 National Television Standard Committee,美国电视播放标准。

PAL

PAL 是 Phase Alternating Line,适用于其他国家的播放标准。

差异

播放速率

NTSC | PAL ———-|—————- 24 FPS | 24 FPS 30 FPS | 25 FPS 48 FPS | 48 FPS 60 FPS | 50 FPS

在搜索视频相关的内容时看到了有高场、地场的差别,联系到平时经常看到的一些词汇感觉到需要记录一下,这是两个经常能看到的词汇:

  • 1080i
  • 1080p

这里的 1080 都很熟悉就是视频分辨率,而这里的 ip 分别指的是

  • Interlace 隔行扫描
  • Progressive 逐行扫描

在过去电视时代,要传输图像,根据人眼的视觉残留制定出 24 帧每秒的标准,当每秒有 24 帧及以上的静止图像连续出现时,人眼就认为是动影像,但是实现这个动影像效果,就需要电视画面传输时及考虑到传输带宽,也要考虑到画面质量。所以过去人们就发明了隔行扫描和逐行扫描,隔行扫描也就是画面在传输时,隔行传输,这样可以节省一半的带宽。

常见的帧率有:

  • 24 frame/sec (film, ATSC, 2k, 4k, 6k)
  • 25 frame/sec (PAL, used in Europe, Uruguay, Argentina, Australia), SECAM, DVB, ATSC)
  • 29.97 (30 ÷ 1.001) frame/sec (NTSC American System (US, Canada, Mexico, Colombia, etc.), ATSC, PAL-M (Brazil))
  • 30 frame/sec (ATSC)

为什么有这么多的帧率呢,这就要回到过去黑白电视时代,世界上不同地区的用电频率不一样,这就涉及到传输电视画面的频率问题,美国的电力是 60Hz 所以上面提到的 NTSC 用的是 30 FPS,而其他地区,欧洲, 中国等等用的是 50 Hz 电,所以是 25 FPS 的画面。当彩色电视被发明出来,电气工程师们为了向后兼容,所以他们把彩色信号做了一个小小的偏移,轻微地将帧率从 30 FPS 改成了 30 / 1.001 = 29.97 FPS,因此诞生了 NTSC 色彩标准。

reference


2019-08-29 ntsc , pal , camera , frame

每天学习一个命令:fd find entries in the filesystem

Linux 下的 find 命令自身就比较复杂,想要查找本地文件时通常需要敲一系列的命令,这时候 fd 就出来解决这个问题了。

最简单的 fd 命令就只需要:

fd [pattern] [path...]

但如果需要使用 find 命令,那么需要:

find ./ -name '*test*' -type f

并且 fd 命令要比 find 命令快很多。

fd 由 Rust 实现。

Use case

查看包含关键字的文件

比如查看本地包含 mysql 的文件:

fd "mysql"

对于 ag 命令则需要

ag -g "mysql" .

而 find 则更加复杂

find ./ -name '*mysql*' -type f

区分查找的类别

使用 -t 命令来区别要查找的内容

f, file  		普通文件
d, directories 		目录
l, symlink 			symbolic links
x, executable 		可执行文件
e 					空文件或者目录

在 Vim 中使用

installation

安装及配置参考官方:

reference


2019-08-29 linux , command , fd , find , ag

每天学习一个命令:fzf 使用笔记

今天在闲逛博客 的时候偶然发现 crispgm 所写的文章,其中推荐了 fzf 这款模糊搜寻工具,所以立马上手体验了一下。

fzf 是一个通用的命令行模糊搜索工具,用 golang 编写,大家的评价都是目前最快的 fuzzy finder,配合 ag 的使用,依靠模糊的关键词,可以快速定位文件。配合一些脚本,可以完全颠覆以前使用命令行的工作方式。

Installation

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

or upgrade

cd ~/.fzf && git pull && ./install

Demo

最直接的使用方式就是在终端输入:

fzf

或者 fzf 可以接受 stdin,比如使用命令

find * -type f | fzf

此时会进入 fzf 的交互窗口,在交互窗口中可以使用 Ctrl + n 或者 Ctrl + p 来上下移动光标。使用 Enter 选中条目

其他常用:

  • Ctrl-j Ctrl-n 都能往下,不过 Ctrl-j 在我的配置中是切换到下 pane 所以我只用 Ctrl-n
  • Ctrl-k Ctrl-p 都能往上,不过 Ctrl-k 在我的配置中是切换到上 pane 所以我只用 Ctrl-p
  • Ctrl-c 或者 Ctrl-g 或者 Ctrl-q 或者 Esc 用来退出 abort
  • Ctrl-h 退格键 backspace,不过这个键和 tmux vim 有冲突所以一般不用
  • Ctrl-a 光标跳转到开头 Ctrl-e 跳转到行结尾
  • Ctrl-w 向前删以 word
  • Ctrl-u 删除所有输入

其实看到后面就发现很多快捷键其实是和 Bash/Shell 下一致的,其他更多的交互命令,可以参考 man fzf

Configuration

FZF_DEFAULT_COMMAND

fzf 默认查找文件使用的是系统的 find 命令,你可以通过自定义该环境变量来更改使用其他命令比如 ag 或者 fd

# 这行配置开启 ag 查找隐藏文件 及忽略 .git 文件
export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -l -g ""'
# or
export FZF_DEFAULT_COMMAND="fd --exclude={.git,.idea,.sass-cache,node_modules,build} --type f"

FZF_DEFAULT_OPTS

该环境变量定义了 fzf 的参数:

export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"

常见的一些操作

fzf 最最常用的快捷键应该就是 Ctrl + rCtrl + t 了。Ctrl-r 用来在历史中搜索,Ctrl-t 用来搜索当前文件夹下的内容。

历史记录搜索

在没有使用 fzf 之前都是 Ctrl + r 来快速输入历史命令,用起来倒也没有太大的问题,fzf 使得 Ctrl-r 变得更加好用,按下 Ctrl-r 之后立即就能够显示之前的历史命令,通过模糊搜索能够展示一个列表,从列表中选择即可。

历史命令 Ctrl-r

在终端命令行下按下 Ctrl-r 会列出 history 命令目录,选中 Enter 离开 fzf 后,该条目会拷贝到命令行中。

搜索当前文件夹 Ctrl-t

在命令行中按下 Ctrl-t 会打开 fzf 窗口,此时如果找到某文件,并选择 Enter,那么该文件名会被拷贝到命令行中。比如说想要打开某文件但是忘记了名字,那么可以先输入 vi 然后按下 Ctrl-t 那么会出现 fzf 的搜索窗口,在窗口中可以模糊搜索文件,然后将文件路径及文件拷贝到命令行中。

同样的方式,如果要 mv 一个文件,同样先输入 mv 然后再 Ctrl-t 找到文件,继续输入目的地址即可。

如果想要更简单 fzf GitHub wiki 中展示了非常多的 Bash Shell 的配置 1,比如可以定义命令 fe

fe() {
  local files
  IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
  [[ -n "$files" ]] && ${EDITOR:-vim} "${files[@]}"
}

那么在 shell 中直接输入 fe 然后回车会自动出现当前目录的 fzf,选择文件之后回车即可用默认 $EDITOR 打开文件。

多选

假如在 fzf 选择窗口中想要选择多个文件,那么可以使用 tab 来进行多选,使用 Ctrl-n, Ctrl-p 上下切换的时候,可以使用 Tab 来选中期望的文件进行多选操作。

比如移动,删除,或者编辑多个文件时可以使用。

更改路径

在 fzf 之前最原始的方法就是 cd 然后输入一个词,不断的按 Tab 直到完整的输入 Path,回车。但假如 path 比较长,那么可能需要费一些时间找到真正想要去的目录,而如果用 fzf 配置

fd() {
  local dir
  dir=$(find ${1:-.} -path '*/\.*' -prune \
				  -o -type d -print 2> /dev/null | fzf +m) &&
  cd "$dir"
}

在终端输入 fd 然后搜索一下目录回车就能直接到该目录下,效率提升 x 倍。

Kill Process

再比如说 fkill 用来 kill process

# fkill - kill process
fkill() {
  local pid
  pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')

  if [ "x$pid" != "x" ]
  then
	echo $pid | xargs kill -${1:-9}
  fi
}

Tmux

再比如创建 Tmux session 一般都是 tmux new -s new-session 创建,如果使用 tmuxinator 则可能 mux name 比较快,但是如果在 fzf 这里只需要 tm new-session

# tm - create new tmux session, or switch to existing one. Works from within tmux too. (@bag-man)
# `tm` will allow you to select your tmux session via fzf.
# `tm irc` will attach to the irc session (if it exists), else it will create it.

tm() {
  [[ -n "$TMUX" ]] && change="switch-client" || change="attach-session"
  if [ $1 ]; then
	tmux $change -t "$1" 2>/dev/null || (tmux new-session -d -s $1 && tmux $change -t "$1"); return
  fi
  session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0) &&  tmux $change -t "$session" || echo "No sessions found."
}

如果 session 不存在则会自动创建,使用 fs 可以快速选择目前可用的 session.

# fs [FUZZY PATTERN] - Select selected tmux session
#   - Bypass fuzzy finder if there's only one match (--select-1)
#   - Exit if there's no match (--exit-0)
fs() {
  local session
  session=$(tmux list-sessions -F "#{session_name}" | \
    fzf --query="$1" --select-1 --exit-0) &&
  tmux switch-client -t "$session"
}

Alt-c

命令行中按下 Alt-c,会列出当前文件夹下的目录,选择后会直接进入该文件夹。

搜索语法

在上面一系列的基础操作后,对 fzf 应该有了一定的了解,那么知道 fzf 的搜索语法其实非常强大,在熟悉正则的基础上,用 fzf 搜索语法可以实现很多的组合,比如使用 ! 来表示不包含,比如 !word 不包含 word 的结果。

比如:

  • ^music 以 music 开头
  • mp3$ 以 mp3 结尾
  • 'word 严格匹配
  • !word 不包含 word
  • !.mp3$ 不以 .mp3 结尾

等等,可以在官方网站上看到。

扩展阅读

一些比较高效的搜索工具

  • find 目录搜索
  • fd 目录搜索
  • grep 文本内容搜索
  • ag 文本内容搜索
  • ripgrep 文本内容搜索

reference


2019-08-28 linux , fzf , command , find , search , grep

禁用 fcitx 额外键切换输入法

之前有提到过在 Linux 下全面切换成了 Rime 输入法,用的是 fcitx-rime 版本的,但是 fcitx 默认自己有一个设置是 Extra key for trigger input method,而这个设置默认的是 Shift both,也就是两边的 Shift 键默认都是切换输入法,那么这就和我的习惯非常不一致。

我习惯于左 Shift 将输入的内容非候选词上屏,也就是当我输入一个英文,但是忘记切换中文输入法时,我可以快速按下左 Shift 来上屏,或者我可以直接 Enter 来上屏,但是如果 fcitx 的话可能机会造成切换输入法,而导致所有输入的内容都丢失。

所以可以安装 fcitx config 工具,在 GUI 中修改,或者可以直接修改配置文件

vi ~/.config/fcitx/config

找到如下一行

SwitchKey=SHIFT Both

然后替换成

SwitchKey=Disabled

然后查看这个配置能看到其他很多有趣的配置,自行调整即可。如果发现这一行配置经常在重启之后又恢复到了默认状态那么可以给这个文件设置一个权限

sudo chmod 444 ~/.config/fcitx/config

另外 fcitx 的扩展配置也在同一级别的目录中,可以查看

ls ~/.config/fcitx/conf

2019-08-27 fcitx , rime , fcitx-config , input-method , keyborad , linux

Ubuntu 系网络配置文件解析及说明

今天遇到一个奇怪的网络问题,记录一下研究过程和一些配置情况,顺便学习一下 Linux 下网络环境配置。

网络配置文件

该文件配置网卡信息 vi /etc/network/interfaces

auto lo
iface lo inet loopback
# 配置 eth0 dhcp 获取 IP 地址
auto eth0
iface eth0 inet dhcp

配置的作用

/etc/network/interfaces 这个配置中可能原本就有一些配置,比如

auto lo
iface lo inet loopback

这两行表示的是 auto lo 系统启动时自动配置 lo 接口,然后对于 lo 接口配置一个本地回环(loopback) 地址。

如果要给网卡配置静态地址

auto eth0
iface eth0 inet static
    address 192.168.2.100
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

下面几行分别表示 eth0 接口的 IP,网络号,掩码,广播地址和网关。

如果要配置自动获取 IP 地址 DHCP

auto eth0
iface eth0 inet dhcp

更多的配置内容可以查看 man interfaces

/etc/network 目录下一看会发现很多有趣的目录

  • if-down.d 网络关闭前
  • if-post-down.d 网络关闭后
  • if-pre-up.d 网络建立前
  • if-up.d 网络建立后

这些目录都是属于 Debian 实现的网络配置,当发生 if-up 时就会执行放在 if-up.d 目录下的脚本,这样就可以用来实现一些很有意思的事情,比如如果写了一个签到脚本,那么可以在笔记本联网时自动完成签到这样,或者联网之后启动 VPN 这样的事情。

添加执行权限

chmod 755 /etc/network/if-up.d/YOUR_SCRIPT

注意的是脚本执行顺序是 lexicographic 字母序。

另外一种方式就是在 /etc/NetworkManager/dispatcher.d/ 这里定义脚本,也可以做到一样的事情,不过这就需要依赖 NetworkManager 了。

配置 DNS

DNS 配置文件在 /etc/resolv.conf 文件中,一般为

search domain
nameserver 127.0.0.53

重启网卡

sudo ifup eth0
sudo ifdown eth0
# or
sudo ifconfig eth0 down
sudo ifconfig eth0 up

重启网络

sudo /etc/init.d/networking restart
sudo /etc/init.d/network-manager restart

2019-08-26 linux , ubuntu , mint , cinnamon , network , eth0

电子书

最近文章

  • So you Start 独服 Proxmox VE 配置 RAID 10 之前购买的 So you Start(OVH 旗下品牌) 的独服,配置有 4 块 2T 的硬盘,但是 So you Start 后台默认的 RAID 级别是 RAID1,这样使得可用的空间只有 8T 中的 2T,25% 的使用率,虽然硬盘安全性级别比较高(允许多块硬盘损坏的情况下依然不丢数据),但是空间可用率太低了,所以折中一下可以使用 RAID-10(允许一块硬盘损坏而不丢失数据),这里就记录一下如何把 So you Start 的独服从 RAID-1 级别在线调整成 RAID-10。正常情况下 OVH 旗下的主机品牌,包括 OHV,So you Start, Kimsufi 都可以适用本教程,其他独服的操作也类似。
  • Ubuntu 20.04 使用 MergerFS [[so-you-start]] 的独服有4块 2T 的硬盘,本来想配置一个 Soft RAID-10,但折腾了一个礼拜,重装了无数遍系统,配置了很多次,从 Ubuntu,Proxmox VE,Debian 都尝试了一遍,最终放弃了,想着充分利用其空间,使用 Proxmox VE,备份好数据,不用 RAID 了,毕竟如果使用默认的 RAID-1,我只能利用8T空间中的 2T 不到,而使用 RAID-10 也只能利用不到 4T 左右空间。至于使用单盘,所有的数据备份,和数据安全性的工作就完全依靠自己的备份去完成了。但是好处是可利用的空间大了。
  • 独服 Proxmox VE 配置 NAT 使虚拟机共用一个公网 IP [[so-you-start]] 的独立服务器本来安装了 Ubuntu 20.04,后来想想为了充分利用 CPU 和内存,不如安装一个 [[Proxmox VE]] 然后在其基础之上再安装 Ubuntu 或者其他的系统测试。So you Start 通过后台安装 Proxmox 的过程比较简单,我直接使用了后台的 Proxmox VE 6 模板安装了 Proxmox。
  • So you Start 独服 Proxmox VE 虚拟机配置 Failover IP 最近买了一台 [[so-you-start]] 的独立服务器,开始的时候安装了 Ubuntu 没有充分利用独立服务器的优势,所以这两天把系统重新安装成了 Proxmox VE,然后在上面又安装了 Ubuntu 20.04,So you Start 提供了额外可以购买的 16 个 [[Failover IPs]],Failover IP 本来是为了可以将服务器迁移到另外的服务器而提供的机制,但在 Proxmox VE 虚拟化技术系统下,可以给虚拟机也分配不同的 IP,这样就实现了从一台服务器虚拟化多个 VPS 的操作。
  • 使用 Remark42 替换博客的 Disqus 评论系统 前两天用隐身窗口打开自己的博客的时候突然发现 Disqus 评论框上一大片广告,没想到现在 Disqus 已经这样了,并且之前还暴露出过隐私问题。所以就想着什么时候替换掉它。