在 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 , network-config , configuration , network-connection , eth0

PostgreSQL 数据库支持的数据类型

在之前一篇 PostgreSQL 初识 中就简单的总结了几个常见的数据类型,但是这几个常见的数据类型并不能显示 PostgreSQL 数据库的强大,所以这里再详细学习一下。

数值类型

对于数值类型,之前的内容 也已经提到过,整型有

  • smallint
  • integer
  • bigint

这三个类型分别占用 2,4,8 个字节,可表示范围逐渐扩大。

对应着三个自增类型

  • smallserial
  • serial
  • bigserial

分别是 2,4, 8 字节,从 1 开始,不能表示负值,自增属性。

定长的浮点数有

  • real, 4 字节
  • double precision , 双精度,8 字节

这两种精度是不精确的,如果需要指定精度,那么可以使用

  • decimal,存储空间不定,需要指定精度
  • numeric,等同于 decimal,二者在 PostgreSQL 中几乎可以等价

字符类型

PostgreSQL 支持的字符类型比较简单直白

  • varchar(n) 变长,有长度限制
  • char(n) 固定长度,不足补空白
  • text 可变长度,无长度限制

布尔值

PostgreSQL 支持布尔,true/false/null,1 字节长,

日期和时间

表示日期和时间,用 date 来表示日期,用 time 来表示一日内时间。

如果要表示日期加上时间,则需要使用到 timestamp。

PostgreSQL 还支持时间间隔 interval,可以表示的时间间隔可以从 -178000000 年到 178000000 年。

几何类型

从下面开始就是发挥 PostgreSQL 巨大潜能的地方了。

PostgreSQL 支持定义几何的点,线,面,图形。

类型 占用空间 说明 表现
point 16 字节 平面点 (x,y)
line 32 字节 直线 ((x1,y1).(x2,y2))
lseg 32 字节 线段 ((x1,y1).(x2,y2))
box 32 字节 Box 矩形 ((x1,y1).(x2,y2))
path 16n + 16n 字节 闭合路径,多边形 ((x1,y1),…)
path 16n + 16n 字节 开放路径 [(x1,y1),…]
polygon 40+16n 字节 多边形 ((x1,y1)…)
circle 24 字节 <(x,y),r>

网络地址

神奇地原生支持网络上常用的 IP 或者 Mac 地址类型

  • cider, IPv4 或者 IPv6 地址
  • Inet, IPv4 地址
  • macaddr, MAC 地址

枚举类型

枚举类型不同于其他类型,需要事先定义

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

UUID 类型

uuid 数据类型用来存储 RFC 4122,ISO/IEF 9834-8:2005 以及相关标准定义的通用唯一标识符(UUID)。由算法产生的 128 位标识符,使它不可能在已知使用相同算法的模块中和其他方式产生的标识符相同。对分布式系统而言,UUID 标识符比序列能更好的提供唯一性保证,因为序列只能在单一数据库中保证唯一。

UUID 被写成一个小写十六进制数字的序列,由短横线分字符分成几组, 8 位数字 +3 组 4 位数字 + 一组 12 位数字,总共 32 个 16 进制数字代表 128 位, 一个这种标准的 UUID 例子如下:

b03e4c89-9a0b-5eb8-ba7d-6ac6bd340b21

XML 类型

XML 类型是 text 类型的扩展,不过 XML 类型相较于 text,增加了 XML 合法性校验。

JSON 类型

PostgreSQL 提供两种类型的 JSON 类型。

  • JSON
  • JSONB

二者的区别

json jsonb
text 类型扩展,增加 JSON 格式校验 JSON 数据二进制表示
插入快,但是查询慢 插入慢,查询快
保存时原样保存,可能包含空白 支持索引,可能优化空白以优化查询
会在查询时重新解析 在查询时不需要解析

大部分的使用场景都会使用 JSONB 类型,除非你明确知道为什么要使用 JSON 类型。

CREATE TABLE employee (
  id serial NOT NULL PRIMARY KEY,
  age integer NOT NULL,
  data jsonb
);

在 JSONB 上新建索引

CREATE INDEX idx_name ON user_info((data->>'name'));

插入

INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "items": {"phone": "iphone7", "camera": "canon"}, "onboareded": true}');
INSERT INTO employee VALUES (2, 35, '{"name": "Alex Watt", "tags": ["Physicist", "Photographer"], "items": {"phone": "Pixel", "camera": "sony a7m3"}, "onboareded": true}');

可以使用 -> 来通过 key 获取 json 内容对应 key 的值:

select data -> 'name' AS name from employee;

通过

select data->'items'->>'phone' as items from employee;

->->> 的区别在于, -> 获取的结果是 JSON Object,而 ->> 会将结果转为 text。在 where 语句中使用

select * from employee where data->'items'->>'phone' = 'iphone7';
# or
select * from employee where data@>'{"name":"Alex Watt"}';

操作符 @> 用来表示包含。

获取数组中的第一个

select data->'tags'->>0 from employee;

注意这里的 ->>0 两个 >> 都是表示最后取出来的值为 text.

JSON 还支持一种复杂语法 #>#>>

select data#>>'{tags,0}' from employee;

等效于上面的获取数组中第一个元素。

如果结果是 List,PostgreSQL 支持展开数组中的内容。

select jsonb_array_elements_text(data->'tags') from employee where id = 1;

这个结果就是 List 内容。

其他更多 PostgreSQL JSON Function

当然使用 JSONB 也还有缺点,比如上面提到的插入慢,因为需要解析存储,聚合查询也会比较慢。最好的解决办法就是把经常需要聚合操作的列设计到普通列中。 更多的文章可以参考这篇,何时避免使用 JSONB

最佳实践

在 guru99 上给出了一些建议,还是值得提一下:

  • 除非想要限制输入长度,否则所有情况优先选择 text
  • 不要使用 char
  • 除非要存储超大整型,否则使用 int 即可
  • 总是选择使用 numeric
  • 只有当存在 IEEE 754 data source 数据时再使用 float 类型

reference


2019-08-26 postgresql , database , db , mysql , data-type

neovim introduction


2019-08-26

git pull hangs rekey after blocks 拉代码时卡住

今天一天连续遇到奇怪的事情,先是早上电脑突然无法联网,各种问题排查一遍,重启电脑,拔网线,最后发现可能是 /etc/network/interfaces 配置问题.

然后中午就遇到了这个诡异的错误,那就是在使用 git pull 拉取代码的时候,突然就 hangs 挂住了。什么都没有反应,所以用

ssh -vvvT git@github.com

来查看了一下发现

debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks

日志卡在了这几行,后面就不动了。经过一番搜索之后发现可能是和 ssh-agent 有关系,git 无法连接到 SSH Agent , 然后导致了卡住。

解决方案:

SSH_AUTH_SOCK= ssh git@github.com

reference


2019-08-26 linux , git , git-pull , ssh , ssh-agent

Rime 配置使用韩语及日语输入法

总结一些 Rime 下韩语输入方案。

韩语输入方案

韩文字母输入键盘布局有 Dubeolsik(두벌식, 2-set), Sebeolsik Final (세벌식 최종, 3-set) , Sebeolsik 390, Sebeolsik Noshift

두벌식

简称 2-set, 这可能是使用最为广泛的一种键盘布局了,南韩从 1969 年起就开始使用。该键盘布局非常有特点,辅音 Consonants 在左边,元音 vowels 在右边。所以能非常轻松地做到左右开工。

Dubeolsik

标准的 2-set 键盘布局已经成为了主流标准,在如今的移动设备中这个键盘布局也已经称为了事实标准。

对于这个键盘布局,突出的特点就是左右子音和母音的划分。具体的使用可以参考这篇文档.

而对于这个键盘布局 Rime 的方案可以参考这里

韩文键盘布局:A=ㅁ,B=ㅠ,C=ㅊ,D=ㅇ,E=ㄷㄸ,F=ㄹ,G=ㅎ,H=ㅗ,I=ㅑ,J=ㅓ,K=ㅏ,L=ㅣ,M=ㅡ,N=ㅜ,O=ㅐㅒ,P=ㅔㅖ,Q=ㅂㅃ,R=ㄱ ㄲ,S=ㄴ,T=ㅅㅆ,U=ㅕ,V=ㅍ,W=ㅈㅉ,X=ㅌ,Y=ㅛ,Z=ㅋ 要打出紧音只需要按住 shift 在按相应的松音键就可以了,比如按 Q 键显示ㅂ,按住 shift 再按 Q 就会打出ㅃ。

左手辅音、右手元音

紧音指的是ㄲ/ㄸ/ㅃ/ㅆ/ㅉ 五个音

ㄲ :shift + ㄱ ㄸ: shift +ㄷ ㅃ: shift +ㅂ ㅆ: shift +ㅅ ㅉ: shift +ㅈ

세벌식 390

Sebeolsik 390 (세벌식 390; 3-set 390) 发布于 1990 年,它基于 Dr. Kong Byung Woo 早期的工作,这个键盘布局充分利用了 QWERTY 键盘的空间,四行键盘都布满了韩文元音与辅音,所以数字被挤压到右手边三行。按照音节划分,Syllable-initial(起始音节)部分在右边绿色部分,syllable-final(结束音节)部分在左边红色部分。 Wiki 上称该布局更加 ergonomic (符合人体工程学)但是这个键盘布局并没有广为接受。

Sebeolsik 3-set 390

세벌식 최종

Sebeolsik Final (세벌식 최종; 3-set Final) 这是上一个布局的最终成果,和上一布局的区别在于数字布局变成了两行,并且所有的音节都在键盘中,不需要额外按键既可以输入所有音节。和 390 布局一样,起始音节在右边,结束音节在左边。虽然该布局经过了精心设计不过依然没有被广泛接受。

Sebeolsik 3-set final

Sebeolsik Noshift

最后还有中 Noshift 布局,设计的目的就是不需要 Shift 使用,对一些无法同时按住两个键的残疾人该键盘有一定优势。

Sebeolsik Noshift

当然如果要了解其他布局,韩语的键盘布局还有这么这么多

GongjinCheong Romaja 输入法

这是遵循韩文罗马化标准 GongjinCheong 的输入法。

GongjinCheong Romaja

GongjinCheong 和下方的 HNC 有些许的差异。

HNC Romaji 输入法

这一套输入法其实遵循着 McCune-Reischauer Romanization 罗马化方案,是西方世界最早将韩文罗马化的方案。也是目前非常流行的韩文转写方案。12

HNC Romaja

单母音 모은

ㅣ i	ㅡ w
ㅏ a	ㅜ u	ㅓ e	ㅗ o
ㅑ ya	ㅠ yu	ㅕ ye	ㅛ yo

双母音

		ㅐ ai	ㅔ ei
		ㅒ yai	ㅖ yei
ㅘ oa	ㅙ oai	ㅚ oi
ㅝ uo	ㅞ uei	ㅟ ui
			ㅢ wi

单子音 자은

ㄱ g	ㅋ k	ㄴ n
ㄷ d	ㅌ t	ㄹ r/l
ㅂ b	ㅍ p	ㅁ m
ㅅ s	ㅈ j	ㅊ c
ㅇ x	ㅎ h

双子音

ㄲ gg	ㄸ dd	ㅃ bb	ㅆ ss	ㅉ jj

Rime hangyl

Rime 的韩语转写方案非以上提交的任何标准,不过最像后面两种罗马化方案,有一些微小的差别,但是却非常的好用。

和 HNC 的主要差别在于 w 和 y 的差异,在 HNC 键盘中 w 是 而 Rime 方案中则是 ,而另外一个 y ,HNC 是 , Rime 的方案则是 ,实际使用上来看 ,而者这两天区别几乎可以忽略不计。

rime hangyl

Rime 解决方案: https://github.com/einverne/rime-hangul

韩语打字练习

韩语打字练习推荐

日语输入方案

reference


2019-08-25 rime , hangul , korean , japanese , input-method , open-source

电子书

最近文章

  • Linux 下找出重复文件 rdfind - find duplicate files in linux 安装使用:
  • 使用 timeshift 来备份和还原系统 Linux Mint 自带的备份和还原工具就是 timeshift, 今天看到有人贡献 timeshift 的命令行版本,突然意识到这个工具其实还有命令行版本。
  • 复式记账 很早就听闻了复式记账这个名词,一直在我的 TODO 上没来得及消化,记得当时主要是看了 wzyboy 和 byvoid 二位的文章,我相信我关注的不同的人选择同样的方式来做一件事情,肯定是有意义的。所以当时我就将复式计帐和 Beancount 放到了我的 Trello 待办事项里面,这几天终于有时间来了解一下了。
  • Play Station 4 Pro Setup 记录一下 PS4 的设置。
  • 快充协议笔记 中文里面的快充,其实对应着很多个英文单次,Quick Charge, fast charge, dash charge, USB PD(USB Power Delivery), Dual charge, 这些许许多多的名词,在中文的语境中都被叫做快充其实是不太准确的。虽然都叫快充,但是其实各个设备厂商都有各自自己的实现,目前市场上比较常见的快充实现是 QC,PD。