使用 Meld 对比文件及文件夹区别

在之前总结 Nemo file browser 的时候接触到了 meld,作为一个 nemo-compare 插件可以用来轻松的比较两个文件夹,两个文件,甚至多个文件。在了解之后发现 meld 其实更加强大,结合 git 使用可以非常轻松地解决 git 的合并冲突问题。

虽然大部分情况我都是用 smartGit 来解决的,smartGit 的三路合并和 meld 能够达到的效果非常相似。

安装

sudo apt install meld

使用

打开 meld 从主界面就能看到应用的分工主要分为三块

  • 文件内容的比较
  • 文件夹内容的比较
  • 版本控制的比较

前两个比较工具都可以选择两个或者三个输入源,后面的版本控制只需要一个版本控制的路径。meld 会自动对选中的内容进行比较。


2018-08-26 meld , linux , git , merge , conflict

Linux 下使用 ClamAV 扫描病毒

ClamAV 是开源的杀毒软件

安装

sudo apt-get install clamav

使用

更新“病毒库”

sudo freshclam

然后可以使用 scan 来扫描

clamscan OPTIONS file/folders

如果可以直接从 root 开始扫描:sudo clamscan

举例

扫描全盘,并显示文件名

clamscan -r /

扫描文件,只显示被感染的文件,并且声音提醒

clamscan -r --bell -i /

扫描全盘文件,只显示感染的文件,后台执行

clamscan -r -i / &

检查所有用户 home 目录下文件

clamscan -r /home

检查用户 home 目录,并将感染的病毒移动到另外的文件夹

clamscan -r --move=/home/USER/VIRUS /home/USER

检查用户 home 目录并移除感染的文件

clamscan -r --remove /home/USER

查看帮助

clamscan --help

更多

相关

ClamTk 是 ClamAV 的 GUI 版本

sudo apt install clamtk

从 PPA 获取

sudo apt-add-repository ppa:landronimirc/clamtk
sudo apt-get update && sudo apt-get install clamtk

reference


2018-08-25 linux , clamav , virus

使用 Nemo 文件管理器

自从用上 mint 之后,我才发现原来 File Manager 能这么好用,Cinnamon 自带的文件管理叫做 Nemo ,至今用过 Windows,Mac,Ubuntu 还要各种发行版,但是唯有 Cinnamon 自带的这个 Nemo 的文件管理器让我用起来最舒服。至于为什么,我一一道来。

功能

双栏

Nemo 外观很简单,和大多数操作系统的 File Browser 都差不多,左边栏基本上是顶层导航栏,然后主体部分是文件浏览的功能。但是我非常喜欢的双栏设计,当时使用 Windows 的时候还需要借助 Total Commander,而 Mac 的 Finder 是层级的,基本上如果一层一层打开文件夹就会出现一连串的中间文件夹列表,依然不能使用双栏。

nemo file browser extra pane

Nemo 的双栏模式叫做 Extra pane,右边一栏可以通过快捷键 F3 快速启动和隐藏,这就使得文件移动复制变得异常简单。当然有人说 mv path1 path2 更快当然在有命令行的情况下就不是同一比较线了。

检查 md5

很多时候下载文件要检查文件的完整性,大部分情况下都 md5sum ~/Downloads/large.file.tar.gz 然后完成了,但是 Nemo extension 原生支持

nemo gtkhash md5

折叠文件夹

同一个层级的文件夹也可以类似树形展开

nemo folder

标签页

我可以说其他 Windows,Mac 都需要其他额外的软件来支持文件管理器中的标签页,而 Nemo Ctrl+T 就能支持,这和我 Chrome 的快捷键 是一致的。

nemo tab

批量修改文件名

有人说不存在,其实 Nemo 本身不带批量重命名功能,但是 Nemo 是支持调用 thunar 的。

sudo apt install thunar

然后在设置中 Edit->Preferences->Behaviour 标签下 ‘Bulk rename’ 空白栏中填入:

thunar -B

然后 nemo -q 重启,此时再多选,就可以批量重命名了

nemo bulk rename

扩展

下面就是最主要的部分了,记住如果要想使得 Nemo 在安装之后生效需要强制重启 Nemo nemo -q 来退出。

Dropbox 支持

Dropbox 同步标示

sudo apt install nemo-dropbox

Nextcloud 支持

Nextcloud 同步标示

sudo apt install nextcloud-client-nemo

nemo-gtkhash

Nemo gtkhash 就是用来显示文件 md5,sha 等等

sudo apt install nemo-gtkhash

nemo-fileroller

Nemo Fileroller 扩展就是用来在上下文菜单中管理压缩包,压缩 / 解压功能的,配合 Compress,几乎可以解压所有文件,压缩也支持非常多的格式。如果 Nemo 中右键没有压缩和解压缩的选项,不要慌一行命令就能解决。

sudo apt-get install nemo-fileroller
nemo -q

然后重启 nemo 即可。

nemo-share

能够快速在浏览文件时共享到 samba

sudo apt install nemo-share

nemo-compare

使用 meld 来比较两个文件夹,或者两个文件

sudo apt install nemo-compare

nemo-seahorse

PGP 加密和签名的工具

sudo apt install nemo-seahorse

nemo-terminal

在文件夹中显示嵌入的命令行

sudo apt install nemo-terminal

nemo-emblems

可以用来自定义文件夹图标

nemo-audio-tab

用来显示 mp3 的包含的 meta 信息,包括 title, artist, album 等等

nemo-pastebin

支持直接上传到 pastebin ,我不怎么用所以没有安装

Tips

Nemo Actions

Nemo 允许用户自己定义上下文菜单,文件 /usr/share/nemo/actions/sample.nemo_action 包含一个样例,存放自定义 actions 脚本的目录:

  • /usr/share/nemo/actions/ 系统级别
  • ~/.local/share/nemo/actions/ 用户级别脚本

actions 脚本必须以 .nemo_action 结尾

扫描病毒脚本 clamscan.nemo_action,需要提前安装 ClamAV

[Nemo Action]
Name=Clam Scan
Comment=Clam Scan
Exec=gnome-terminal -x sh -c "clamscan -r %F | less"
Icon-Name=bug-buddy
Selection=Any
Extensions=dir;exe;dll;zip;gz;7z;rar;

在比如检查 md5 或者 sha1 也可以直接放到右击菜单中

[Nemo Action]
Active=true
Name=Check SHA256
Name[fr]=Vérifier le SHA256
Comment=Check the SHA256 signature of the file
Comment[fr]=Vérifier la signature SHA256 de ce fichier
Exec=mint-sha256sum '%F'
Icon-Name=gtk-execute
Selection=S
Mimetypes=application/x-iso9660-image;image/png;image/jpeg;

再比如我写一个脚本将选中的文件或者文件夹中空格部分替换为 _

format_filename.nemo_action 如下

[Nemo Action]
Active=true
Name=Format filename %N
Comment=Replace filename space with - applied to %N
Exec=<format_filename.py %F>
Selection=any
Extensions=any;
EscapeSpaces=true

python 脚本名叫 format_filename.py

import sys
import os

command = sys.argv[0]
print("Running " + command)
print("With the following arguments:")
for arg in sys.argv:
    if command == arg:
        continue
    else:
        formated_path = arg.replace(' ', '_')
        os.rename(arg, formated_path)

nemo_action 文件中用到了一些内置的变量

  • %U - insert URI list of selection
  • %F - insert path list of selection
  • %P - insert path of parent (current) directory
  • %f or %N (deprecated) - insert display name of first selected file
  • %p - insert display name of parent directory
  • %D - insert device path of file (i.e. /dev/sdb1)

官方的样例可以查看本地的文件也可以看 GitHub

Nemo Actions 将 Nemo 文件管理器的功能上升了另外一个层面,如果 Python/Bash 能够做的事情,那么在 Nemo 中都能够完成。那几乎就是所有的任务都能够在文件管理器中右键完成了。再举个简单的例子,我经常用 ffmpeg 将 Mp4 中的音频提取出来,那么就可以直接用 Actions ,然后定义

Exec=gnome-terminal -x sh -c 'ffmpeg -i %F -f mp3 anyname.mp3'

当然其他的都可以完成了。

配置

默认情况下 Ubuntu 下面默认的文件管理器还是 nautilus.desktop , 可以使用如下命令查看默认的文件管理器

xdg-mime query default inode/directory

我电脑上返回的结果是 nautilus-folder-handler.desktop

如果本地机器已经安装了 nemo,那么可以使用如下命令将默认的文件管理器设置为 nemo

xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search

如果想要恢复之前的设置,将 nemo.desktop 设置回去即可

xdg-mime default nautilus.desktop inode/directory application/x-gnome-saved-search

然后可以使用 xdg-open $HOME 来验证有没有生效。

reference


2018-08-23 nemo , cinnamon , file-manager , ubuntu , linux-mint

Python 并发编程之 gevent

gevent 中最主要的是 greenlet,greenlet 是 Python 的 C 扩展,用来实现协程。

协程 Coroutine,就是可以暂时中断,之后再继续执行的程序

事实上 Python 就有最基础的 Coroutine,也就是生成器 generator

协程就是一种特殊的并发机制,其调度”就是指什么时候调用什么函数”完全由程序员指定

  • 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
  • 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
  • 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

greenlet

看一个最经典的生产者消费者模型。

from greenlet import greenlet
from time import sleep

def consumer():
    last= ''
    while True:
        receival = pro.switch(last)
        if receival is not None:
            print(f'Consume {receival}')
            last = receival
            sleep(1)


def producer(n):
    con.switch()
    x = 0
    while x < n:
        x += 1
        print(f'Produce {x}')
        last = con.switch(x)

pro = greenlet(producer)
con = greenlet(consumer)
pro.switch(10)

gevent

gevent 是一个并发网络库,他的协程是基于 greenlet 的。并基于 libev 实现快速事件循环(Linux 上是 epoll,FreeBSD 上是 kqueue,Mac OS X 上是 select)。

一个比较通俗的解释就是当 greenlet 遇到 IO 操作,比如访问网络时自动切换到其他 greenlet ,等 IO 操作完成,在适当的时候切换回来继续执行。由于 IO 操作非常耗时,经常使程序处于等待状态,所以 gevent 保证总是有 greenlet 在运行,而不是等待 IO。

import gevent

def foo():
    print('Running in foo')
    gevent.sleep(0)
    print('Explicit context switch to foo again')

def bar():
    print('Explicit context to bar')
    gevent.sleep(0)
    print('Implicit context switch back to bar')

gevent.joinall([
    gevent.spawn(foo),
    gevent.spawn(bar),
])

gevent.spawn() 方法会创建一个新的 greenlet 协程对象,gevent.joinall() 方法会等待所有传入的 greenlet 协程运行结束后再退出。

优缺点

gevent 的优点如下:

  • 执行效率高,子程序切换几乎没有开销,与多线程相比,线程越多,协程性能越明显
  • 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在控制共享资源时也不需要加锁
  • I/O 多路复用是在一个进程内部处理多个逻辑流程,不用进行进程切换,性能较高,另外流程间共享信息简单。
  • 协程有编程语言提供,由程序员控制进行切换,所以没有线程安全问题,可以用来处理状态机,并发请求等 IO 密集型任务

gevent 缺点如下:

  • 不能利用 CPU 多核优势
  • 程序流程被事件处理切割成一个个小块,程序比较复杂,难于理解

所以,协程的适用场景,应该是一些I/O 密集型的并行程序,而对应的计算密集型,应当采用传统的多线程、多进程方案。

相关知识点

  • Threads
  • Processes
  • SubProcess (Or os.system calls)
  • concurrent.futures
  • gevent, greenlet etc
  • asyncio aiodns
  • cython (Disabling the GIL)
  • Writing C extensions

reference


2018-08-22 python , greenlet , gevent , thread , process , yield

又一个网页文件管理:filebrowser

之前一直使用的是 h5ai,平时也够用,不过 h5ai 是不能上传文件编写文件的,这算是一个问题吧,今天正好看到了 filebrowser,以前叫做 file manager。

去官网看来一眼,发现支持 docker, 所以就比较方便了。

具体 docker compose 的文件见 这里

只要配置好,几乎就是一键安装了。以后转战 filebrowser 了。


2018-08-20 web , filemanager , h5ai , filebrowser

Linux 下超好用字典 GoldenDict

最近在使用 Linux 版有道的时候发现非常卡,影响正常使用,所以就发现了这个 GoldenDict。以前在 Win 下用过 lingoes 但是无奈只有 Win 版本。 GoldenDict 是一种开源词典,它像 Eudict、Mdict、Lingoes 以及 BlueDict 等词典一样可以加载外挂词典文件。基于 GNU GPL 第三版以上协议。

安装

Ubuntu/Linux Mint 下安装非常简单

sudo apt install goldendict
  • For linux: https://github.com/goldendict/goldendict/wiki/Early-Access-Builds-for-Linux-Portable
  • For Mac OS X : https://github.com/goldendict/goldendict/wiki/Early-Access-Builds-for-Mac-OS-X
  • For Windows: https://github.com/goldendict/goldendict/wiki/Early-Access-Builds-for-Windows

功能特色

支持的字典格式

  • Babylon .BGL files, Babylon(巴比伦)词典的 .BGL 格式文件,完整保留全部图片及其他资源
  • StarDict .ifo/.dict./.idx/.syn dictionaries StarDict(星际译王)
  • MDict .mdd and .mdx 文件,mdd 文件是音频图片部分,mdx 是索引
  • Dictd .index/.dict(.dz) dictionary files
  • ABBYY Lingvo .dsl 源文件,together with abbreviations. The files can be optionally compressed with dictzip. Dictionary resources can be packed together into a .zip file.
  • ABBYY Lingvo .lsa/.dat 格式音频档案 . Those can be indexed separately, or be referred to from .dsl files.
  • Lingoes 灵格斯词霸 .ld2 这里需要指出来的是 ld2 格式只有移动版 Android 才支持

更多支持的格式可以参考这里

其他功能特色

  • 支持 Windows, Linux, Mac, Android,Android 版是商业软件,免费版最多能用 5 本词典,支持分享查词。
  • 完美支持单词复数,ing 形式等变形(软件设置中 morphology)
  • 支持查阅 Wikipedia、Wikitionary 及任何其他基于 Mediawiki 的站点。
  • 支持使用模板化的 Url 样式来使用任何网页。
  • 支持查找与收听 forvo.com 网站上面的发音。
  • 基于 hunspell 的词法系统,用于词语的溯源及拼法建议。
  • 能够索引任意路径下面的音频文件以查找语音。
  • 弹出搜索功能:一个小窗口会弹出,用于显示在另一程序中选中的单词的词义。
  • 支持全局热键,可在任何一点触发该程序,或直接从剪切板中查找词义。

字典安装

在线字典

有道的源

http://dict.youdao.com/search?q=%GDWORD%&ue=utf8

Bing 中文的源

https://cn.bing.com/dict/search?q=%GDWORD%

iciba

http://www.iciba.com/%GDWORD%/

zdic

http://www.zdic.net/sousuo/?q=%GDWORD%

离线字典

简明英汉字典增强版

收录 324 万词条,如果只是单纯的想要划词翻译,并不是那么在意英语学习,而只想要快速获知单词含义,这本字典足矣。不管是单词还是短语,这本词典收录非常详细。

Longman Dictionary of Contemporary English 5th Edition (朗文当代高级英语辞典第五版) 五星推荐

记得当时上学的时候,隔壁寝室英语专业的学长唯一给我推荐的字典就是朗文当代(LDOCE5),后来渐渐的才了解到,这本英英词典收录单词量最大,例句最多,搭配和用法也最全。

longman dictionary

词典给出了每个单词的音标以及英式和美式发音,单词的各种变形,单词出现时间,同时还有单词的词源。同时它会列出每个词条的英文解释和各种搭配例句,甚至这本朗文当代连例句的音频也有,并且不是那种合成的机械式发音,而是真人原声,非常自然。

朗文当代还有一个实用功能就是:COLLOCATIONS,也就是单词搭配

longman dictionary collocations

比如一些简单的单词,可能平时知道解释,但是并不了解一些搭配使用,这个功能让学习单词更上了一层。比如说上图中,development 组合,前面加形容词,动词,后面可以接名词。

词典另外一个实用功能就是:THESAURUS,也就是同类词典,朗文当代会列举出当前单词同类的其他单词,比如 walk

  • walk to move forward by putting one foot in front of the other
  • wander to walk without any clear purpose or direction
  • stride to walk with long steps in a determined, confident, or angry way
  • pace to walk first in one direction and then in another many times, especially because you are nervous
  • march to walk quickly with firm regular steps – used especially about soldiers or someone who is angry
  • wade to walk through deep water
  • stomp to walk putting your feet down very hard, especially because you are angry

这些单词都有“行走”的意思,但是看到英文解释就会发现,每个单词都有细微的区别,”wander”是“漫无目的的走”,”stride”是“大踏步走”,”pace” 是“踱步走”。

Macmillan English Dictionary for Advanced Learners (麦克米伦高阶英语词典 第二版)

《麦克米伦高阶英语词典》是针对高阶英语学习者推出的学习型字典,有如下特点

  • 采用星号标注词频,使用一、二、三个不等的星号来标示其使用频率的高低(一二三星词汇加起来一共有 7500 个,三星词汇出现频率最高,一星最少)
  • 另外字典带有大量的短语搭配,每个词条相应都会列出常用的短语搭配
  • 另外有发音和同义词,但是他的同义词不像朗文当代会单独列出一个小篇幅介绍,而是穿插在单词的释义下面。

macmillan english dictionary

Oxford Advanced Learner’s English-Chinese Dictionary 8th Edition (牛津高阶英汉双解)

牛津高阶应该是我最熟悉的一本字典了,从高中起老师推荐,基本算是人手一本的必备词典。不知道在别的地方教学用字典是什么,反正在我看来即使到了大学当时的牛津高阶英汉词典也是非常常见,那个大红色的封面,至今记忆犹新。

这本字典和其他字典比较起来就显得非常贴近中文为母语的英语学习者了。英语解释和汉语解释都很详细。包括习语,搭配,同义等等也都有。这里就是牛津词典和其他词典不同的地方了,在牛津的版本中会出现 IDM,是 idiom,表示的是习语,习惯用法,SYN 是 synonym 也就是同义,对于一般的单词牛津词典都会单独把这些列出来。其他常见的标志

  • PHR V 是 phrase verb 动词短语
  • AW 学术单词

其他的非常用的就去看字典的说明吧

oxford advanced learner's English-Chinese Dictionary 8th

Collins Cobuild Advanced Learner’s English Dictionary (柯林斯高阶英英词典)

柯林斯字典有两个特点

  • 采用英文整句释义来解释单词
  • 用五颗星来标记词频

柯林斯词典有一个高达 2.5 亿的语料库,从语料库中筛选出了最常用的 14600 词用五星标注。其中五星(最常用词,以下逐级次之)680 词,四星 1040 词(累计 1720 词),三星 1580 词(累计 3300 词),二星 3200 词(累计 6500 词),一星 8100 词(累计 14600 词)。根据语料库的统计结果,掌握五级四级的前 1720 詞,就可以读通英语资料的 75%,掌握五、四、三、二级的 6500 词,就可以读通英语资料的 90%,掌握这 14600 词,就可以读懂任何英语资料的 95%,即从理论上说,任何一篇 100 词的文章里大概只有 5 个词不认识。

Cambridge Advanced Learner’s Dictionary (剑桥高阶英语学习词典)

剑桥高阶英语学习词典(又称 CALD),它以剑桥国际英语语料库(CIC)中逾 7 亿词条为蓝本,并参考了剑桥英语学习者语料库(CLC)中剑桥测试系统的原始语料,收词量和词条搭配量都非常巨大。这本词典的收词量很大,而且带有大量的短语。对于每个单词,词典中都会给出英式和美式的音标以及发音。

Merriam-Webster’s Advanced Learner’s English Dictionary (韦氏高阶英语词典)

《韦氏高阶英语词典》是美系品牌,因此收录了较多的美式常用惯用语以及动词搭配。词典最大的特点是:例句超级多。这本词典据说收录了 160,000 个例句,号称是市面上所有英语学习字典中收录例句最多者。韦氏不仅收录例句多,对于比较难的例句,它还会贴心地在例句后面附带上一句通俗版的解释,从为学习者考虑这一点来说,这是我见过的最有诚意的一本词典了。

如果你喜欢看大量的例句,喜欢通过例句来记单词,那么这本词典会是你最好的选择。

Merriam-Webster’s Collegiate Dictionary (韦氏大学辞典)

与上面提到的几本学习型词典不同,这本词典是母语词典,其使用对象是英语母语人士,有点类似与汉语中的《新华词典》。韦氏大学辞典释义的用词难度也比学习型词典高上不止一个等级,而且一般没有例句。我们可以对比一下”melancholy”在柯林斯和韦氏大学词典中的解释:an abnormal state attributed to an excess of black bile and characterized by irascibility or depression

black bile 是什么?irascibility 又是什么? 如果词汇量太低的话你会发现查个单词结果连释义都看不懂。这种母语词典最大的优点是释义精准且全面,收词量巨大,缺点是释义用词难度没有上限,对初学者来说难度太高,容易打击自信心。建议将韦氏大学辞典与其他学习型词典一起搭配使用,互为补充,不建议单独使用。

Vocabulary.com

这本词典来源于单词学习网站 http://Vocabulary.com ,它是一本能让你感觉到是在“学单词”而不是在“记单词”的词典,比如词典会采用口语化举例子的形式来让你理解单词的意思,用法和来源,让你学以致用。

Longman Language Activator (朗文英语联想活用词典)

《英语联想活用词典》是一本学习型字典,也是一本同义词词典,它的主要排版形式如下

longman language activator

联想词活用词典,是 Thesaurus (同义词典) 的进一步细化,将同义的单词和词组进一步展开说明的词典,被称为联想词,也就意味着这本词典并不止索引了同义词,相关联的单词都会在 RELATED 中显示。这本字典是全英字典,适合学习英语到一定程度,想要进一步学习同义词用法的英语学习者。

比如上图中索引的是 love,相关的单词中有反义词 hate,有同义的 like,还有联想的 sex,relationship,boyfriend/girlfriend, marry,obsession 等等,这是一本值得用来读的字典。

Collins Thesaurus (柯林斯同义词词典)

与上面的学习型词典不同,柯林斯同义词词典是一本工具词典。它能够列出常用词条的同义词。我们可以使用它来扩大词汇量,丰富写作用词。举个例子,表示寒冷最简单的可以用”cold”,但我们还可以有更多选择,查一查词典,它会告诉你还可以用 “chilly, arctic, bleak, cool, freezing, frigid, frosty, frozen, icy, wintry” 这些词。

USE THE RIGHT WORD

上面的 Collins Thesaurus 是同义词词典,而这本 USE THE RIGHT WORD 则是同义词辨析词典。

其实即使是同义词,它们的意思也往往是有细微差别的。小学的时候你一定学过 “安静”和“宁静”这两个词,我们可以说“上课铃响了,教室里逐渐安静下来”,却没有人说“上课铃响了,教室里逐渐宁静下来”,这就是词与词之间的区别。

英语中也是如此,比如”disaster”和”catastrophe” 都能表示“灾难”,但两者是有区别的,”disaster”更加强调灾难已经形成的事实,而”catastrophe”是强调灾难本身,所以才有这样一个句子 “They were glad they had survived the catastrophe and had met with no disaster.”

而 USE THE RIGHT WORD 就是一本能告诉你单词之间细微区别的词典。将它装载到手机词典中,查单词时顺便看看相应的同义词辨析,这样能不断提高你对单词的敏感度。

no two words means exactly same thing

下面是词典截图,收录单词不是很多,但是解释比较多。

use the right word

WordNet 3.0

English Etymology

这是一本英语词源字典,比较简单,排版也比较简陋。对于单词由来比较关注的学习者可以备一份。

简单韩语字典

korean dictionary

其他字典

首推 pdawiki,这个论坛上有非常多精美的字典,不过要求门槛比较高,新人一般很难下载到这些离线的字典。

goldendict 官网给出的字典

解压后,在词典 - 文件添加路径即可

胡正网站给出了非常多语言的字典

babylon 免费的字典

最后这里有近 5 个 G 的英英和英俄字典,应该是个俄国人分享的

字典相关

引进词典又分为英系和美系两大类,目前英系词典占据中国市场的主导地位,著名的品牌如牛津、朗文、剑桥、麦克米伦、柯林斯,简称“牛朗剑麦柯”(谐音“牛郎见迈克”)合称“英国五虎”。

美系词典主要有《美国传统词典》(The American Heritage Dictionary) 和“韦氏词典”两大品牌,而实际上“韦氏”在这里是一个复数名词,在美国有众多出版社都出过冠以“韦氏”名号的词典,之所以造成今天“鱼龙混杂”的局面,是因为韦伯斯特最初编撰“韦氏词典”是早在距今 200 年前的 19 世纪初,根据美国法律,“韦氏”作为未经注册的商标早已超出了知识产权的保护期进入公共出版领域,所以今天变成一个共享品牌。对于中国读者而言,最熟悉的“韦氏”主要有两家,一个就是正宗的“韦伯斯特”,由老东家麦瑞安—韦伯斯特出版公司出版,旗舰品牌 Webster Third New International Dictionary,但普通读者(特别是准备雅思和 GRE 的同学)更熟悉的是该社各形各色的韦氏原版小词典,被大家戏称之曰“韦小宝”。麦瑞安—韦伯斯特于 08 年底推出第一部学习型词典 Webster Advanced Learner’s Dictionary,可惜尚未听说那家出版社引进该词典的版权;另一个就是美国鼎鼎大名的兰登书屋所出版的“韦氏词典”系列,现在兰登在所出“韦氏”前面一般都冠以“兰登书屋”的名目,一看便知,不会混淆,如商务 97 年引进出版的《蓝登书屋韦氏英汉大学词典》(Random House Webster’s Colledge Dictionary),外研社 06 年引进出版的《韦氏高阶英汉双解美语词典》(Random House Webster’s Dictionary of American English)。在英系美系两大类别之外,有一本词典我要特别提一下,外研社《英汉多功能词典》,这是一本日系词典,原书是日本人编给日本人学英语用的…… 说到这里,实际上今天大名鼎鼎的 OALD 最初就是霍恩比 (A S Hornby) 教授执教日本期间所编写的一部针对非母语人士(主要是以日本人为代表的亚洲读者)的学习型词典《现代英语学习词典》(A Learner’s Dictionary of Current English)……在英美两系之外,另有一本日系词典值得特别提一下,即外研社《英汉多功能词典》(A Multifunction English-Chinese Dictionary),日文原版(E-Gate English-Japanese Dictionary)由田中茂范主编。

词形匹配

GoldenDict 默认情况下,比如屏幕取词获取 “stores” 默认是没有结果的,但是其实并不是 GoldenDict 的问题,只需要导入构词法规则库就能够让 GoldenDict 自动判断复数从而进行查词。

下载英语构词法规则库:

然后在 编辑 ->词典 ->词典来源 ->构词法规则库 中设置规则目录,在我的电脑上是 /usr/share/myspell/dicts ,当然也可以将下载的文件拷贝到该目录中记载即可。

对比

GoldenDict 和其他可选字典的对比

stardict 被移除的 Sourceforge 页面上给出了一系列的 Alternative 选择

字典软件 链接 支持格式 平台 特色功能 License
GoldenDict https://github.com/goldendict/goldendict 特别多,见上文 GUN/Linux, Mac, Windows, Android 见上文 GNu GPLv3+
Babiloo https://code.google.com/archive/p/babiloo/ 已停止 SDictionary, and StarDict formats Linux, Windows, Mac 已停止维护 GPL v3
LightLang https://code.google.com/archive/p/lightlang/ 已停止开发 俄语 Linux only 已停止维护略 GPL v2
Lingoes http://www.lingoes.net/ 私有格式 Windows only Windows 下比较好用,但有广告  
Dicto http://dicto.org.ru/ XDXF dictionaries windows only 只面向俄语 略  

其他编程资源

使用 stardict-tools 可以将 stardict 格式的字典转变成可读的格式

sudo apt-get install stardict-tools
# 工具安装之后会在 `/usr/lib/stardict-tools/` 目录下

一个将各种字典文件转变格式的脚本

一个使用 Python 编写的生成 .mdx 文件的脚本

一份关于 MDD 和 MDX 文件格式的分析

wikipedia 的离线包,很大,好几十个 G

原来只是想要找到一个 Linux 下代替有道的桌面词典,没想到竟然过了一个礼拜,这一个礼拜每天回来的第一件事情就是整理可用的字典。在一个礼拜的努力下,终于已经完美可用。这一个礼拜所看过的字典版本已经超过了我过去二十多年的数量,也让我发现了原来学习英语一直以来都缺失了这么重要的一环。真的有些单词,英英解释起来要比中文要轻松许多。今天也同样遇到了一个 argument 和 parameter 两个单词在编程的语境中经常被翻译成一个词 —- 参数,但其实仔细看英英解释就能发现

  • argument 是 a reference or value that is passed to a function, procedure, subroutine, command, or program
  • parameter 是 a set of fixed limits that control the way that something should be done

虽然两者本身的含义也非常类似,在计算机术语中几乎也是等价,但是英英的解释能看到,argument 是调用者的传参,而 parameter 是定义方法或者函数时候的参数,虽然两者表达的东西是一样的,但是其实有着一定的区别。

再比如之前也提到的 walk, wander, stride, pace, wade 都有走的意思,但是其实每个单词使用的场景都不一样都需要仔细考虑。或许这就是语言学习最难过的一关,这也是学习者无论如何都很难超越母语使用者最为重要的一点了吧。

reference


2018-08-19 dict , linux , goldendict , youdao , dictionary , free-dictionary , offline-dictionary

Linux 网络配置

昨天升级 Ubuntu ,不知为何将网卡配置覆盖了,导致一时间无法上网,然后看了一些网络配置的文章,感觉自己需要补习一下相关知识,所以有了这篇文章。

下面就按照命令分别展开吧

ifconfig

这个命令是查看本地网络端口最常见的命令了,略

设置网卡及 IP

/etc/network/interfaces 文件中保存着本地网络网卡的相关配置

配置 DHCP 自动获取 IP

auto eth0
iface eth0 inet dhcp

假如要配置静态 IP

auto eth0               # 要设置的网卡
iface eth0 inet static  # 设置静态 IP;如果是使用自动 IP 用 dhcp,后面的不用设置,一般少用
address xxx.xxx.xxx.xxx  # IP 地址
netmask xxx.xxx.xxx.xxx  # 子网掩码
gateway xxx.xxx.xxx.xxx  # 网关

修改保存,之后使用 sudo /etc/init.d/networking restart 来使其生效。

设置 DNS

DNS 相关的配置在 /etc/resolv.conf 文件中。如果希望永久生效可以修改 /etc/resolvconf/resolv.conf.d/base 文件中

nameserver 8.8.8.8   # 希望修改成的 DNS
nameserver 8.8.4.4

然后使用 sudo /etc/init.d/resolvconf restart 来使得 DNS 生效。


2018-08-18 linux , network , command , ifconfig

AES 加密算法

高级加密标准 (AES,Advanced Encryption Standard) 为最常见的对称加密算法。对称加密算法也就是加密和解密用相同的密钥。

将明文 P 使用加密密钥 K 加密成密文 C ,传输,然后在使用 AES 解密函数使用相同的密钥 K 解密,产生明文 P

设 AES 加密函数为 E,则 C = E(K, P), 其中 P 为明文,K 为密钥,C 为密文。也就是说,把明文 P 和密钥 K 作为加密函数的参数输入,则加密函数 E 会输出密文 C。

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

基本原理

AES 为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。


2018-08-15 aes , encryption , 对称加密

使用 alembic 迁移数据库结构

Alembic 是一个处理数据库更改的工具,它利用 SQLAlchemy 来实现形成迁移。 因为 SQLAlchemy 只会在我们使用时根据 metadata create_all 方法来创建缺少的表 ,它不会根据我们对代码的修改而更新数据库表中的列。它也不会自动帮助我们删除表。 Alembic 提供了一种更新 / 删除表,更改列名和添加新约束的方法。因为 Alembic 使用 SQLAlchemy 执行迁移,它们可用于各种后端数据库。

安装

pip install alembic

使用

初始化,使用如下命令会创建环境到 migrations 文件夹下,通常情况下使用 migrations 文件夹来存储 alembic 环境,如果想使用别的名字,相应替换为别的名字即可。注意下面命令中的 migrations 将会是存储所有迁移脚本的目录名字

alembic init migrations

初始化过程会创建迁移环境和 alembic.ini 文件。创建成功后可以看到如下结构:

alembic
├── README
├── env.py
├── script.py.mako
└── versions
alembic.ini

在这个环境中可以找到 env.pyscript.py.mako 模板还有 versions 文件夹。versions/ 目录会存储之后的所有迁移脚本。 env.py 文件用来定义和实例化 SQLAlchemy 引擎,连接引擎并进行事务,保证当 Alembic 执行命令时被合理的调用。 script.py.mako 模板在创建迁移时被使用,他定义了迁移的基本模板。

配置

init 生成之后需要修改 env.py 如下的两个配置,才能生效。改变 sqlalchemy.url 值,配置数据库连接。

sqlalchemy.url = driver://user:pass@localhost/dbname

为了让 Alembic 追踪到数据模型的变化,需要将 target_metadata 赋值为数据库的 metadata

from flask import current_app
config.set_main_option('sqlalchemy.url',
                       current_app.config.get('SQLALCHEMY_DATABASE_URI'))
target_metadata = current_app.extensions['migrate'].db.metadata

自动创建版本

使用alembic revision -m "comment" 来创建数据库版本。命令会产生一个数据库迁移脚本。

更新数据库

升级数据库使用 alembic upgrade,降级使用 alembic downgrade,更新到最新版则使用 alembic upgrade head

查看数据库就会发现 alembic 会自动产生一个 alembic_version 的表,只有一个字段和值 version_num,记录当前数据库版本。

reference

  • 《Essential SQLAlchemy 2nd Edition 2015》

2018-08-13 python , mysql , sql , migration , db , database , alembic , flask , sqlalchemy

每天学习一个命令:iotop 查看 Linux 下每个进程 IO 占用

iotop 是一个用来监控磁盘 I/O 的类似 top 的工具,Linux 下 IO 统计工具,比如 iostat, nmon 等只能统计到每个设备的读写情况,如果想要知道哪一个进程占用比较高的 IO 就要使用 iotop。 iotop 使用 Python 语言编写,要求 Python >= 2.5,Linux Kernel >= 2.6.20.

使用这个命令最主要的一个原因就是快速找到 IO 占用比较高的程序,以便进行排查。

安装

sudo apt install iotop
sudo yum install iotop

快捷键

  • 交互式快捷键,a 用来切换累积使用量和 IO 读写速率。
  • 左右箭头用来改变排序,默认按照 IO 排序,可以切换为读或者写排序等等。
  • r 改变排序顺序
  • o 只显示有 IO 输出的进程
  • q 退出

reference


2018-08-07 io , iotop , top , linux , htop

电子书

Google+

最近文章

  • 小米笔记本 Air 13.3 在 Linux Mint 下安装 nvidia 驱动 先来说说前因后果,因为使用之前 msi 上的系统恢复到小米笔记本 所以也不存在 wifi 驱动的问题,恢复完成之后一切都非常顺利,所有的一切设置都和之前的笔记本一致,唯一让我不满意的就是说好的续航非常给力呢,实际使用也只有短短三个小时,比我之前的 GE60 好不到哪里去。所以我就在想问题出在哪里,显卡肯定是首要原因。
  • epub 格式解析 epub 是一个电子书标准,最近在研究电子书解析,所以有了此文。
  • 电子书常见格式及格式转换 最近因为写 kindle 推书的服务,所以不得不接触到了不同的电子书格式,mobi,epub, azw3,都比较常见,kindle 只支持 mobi 格式,所以亚马逊提供 了 KendleGen 这个工具来将 epub 转换为 mobi 格式。
  • 配一副眼镜 在中国无论是购买什么东西,都需要对这一个行业进行深度的了解,不然就会被坑,眼镜同理。回想一下我自己的戴的眼镜已经八年多,现在感觉是佩戴眼镜已经不舒服,所以就想要做个简单的了解。
  • SQLAlchemy 中处理 relationship 本文主要关注在 SQLAlchemy 中实现基本的关系模型,一对多,多对一,多对多等等。