Appium 介绍

在接触爬虫的时候遇到了这个工具,看官网介绍应该可以归纳总结为:

  • 开源的移动端自动化测试框架
  • 跨平台,Linux,Mac,Windows 通吃
  • 支持 Android,iOS,混合应用,Web 应用

设计初衷

设计哲学

  • 不需要为了自动化而重新编译修改 App
  • 不限定在某个语言或者框架, C/S 架构,Client 端实现语言不限制
  • 不重造轮子,扩展 webdriver 协议
  • 开源

Jason Huggins 在 2004 年发起了 Selenium 项目,Jason 和他所在的团队采用 Javascript 编写一种测试工具来验证浏览器页面的行为。关于 Selenium 的命名比较有意思,当时 QTP mercury 是主流的商业自化工具,是化学元素汞,而 Selenium 是开源自动化工具,是化学元素硒,硒可以对抗汞。

在 2006 年的时候,Google 的工程师 Simon Stewart 发起了 WebDriver 的项目。WebDriver 是通过原生浏览器支持或者浏览器扩展来直接控制浏览器。

技术架构

安装

Appium Server,npm 命令的安装可以查看这里

npm install -g appium

client 可以参考这里,支持 Ruby,Python,Java,JS,OC,PHP,C# 等等

也可以选择 Appium Desktop

环境安装检查,appium-doctor

$ appium-doctor
info AppiumDoctor Appium Doctor v.1.4.3
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor  ✔ The Node.js binary was found at: /usr/bin/node
info AppiumDoctor  ✔ Node version is 8.11.4
info AppiumDoctor  ✔ ANDROID_HOME is set to: /home/einverne/Android/Sdk
info AppiumDoctor  ✔ JAVA_HOME is set to: /usr/local/jdk1.8.0_131
info AppiumDoctor  ✔ adb exists at: /home/einverne/Android/Sdk/platform-tools/adb
info AppiumDoctor  ✔ android exists at: /home/einverne/Android/Sdk/tools/android
info AppiumDoctor  ✔ emulator exists at: /home/einverne/Android/Sdk/tools/emulator
info AppiumDoctor  ✔ Bin directory of $JAVA_HOME is set
info AppiumDoctor ### Diagnostic completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor Everything looks good, bye!
info AppiumDoctor

总结来看,完成 Appium 安装需要经过如下的步骤:

  • JDK,配置 JAVA_HOME
  • Android SDK,配置 ANDROID_HOME
  • appium 自身,npm 或者 desktop 随意
  • appium client
  • Android 模拟器或者真机

几个概念

Appium Desired Capabilities

大致可以认为 k-v 的配置,具体可以参考官网

SDK 辅助工具

Android SDK 提供了一些辅助工具,大都在 SDK tools 目录下,不同系统可能命名方式有些差异,但基本都能够识别。

uiautomatorviewer

工具在 Sdk/tools/bin/uiautomatorviewer 下, 这是 android sdk 自带的工具可以用来查看控件的属性,id,class 等等,也可以用来查看 package name。

如果目标设备的 API Level 低于 18 则 uiautomatorviewer 不能获得对应的 sesource id,只有等于大于 18 的时候才能使用。

ui automator viewer

Android Device Monitor

工具在 sdk/tools/monitor

android device monitor

实例

查看应用包名

查看包名的方式有很多,有很多 root 权限的应用都可以直接查看包名

查看应用 Activity 名

上面提到的 uiautomatorviewer 是以一种方式,其他

  • 源码
  • 反编译
  • Xposed Inspeckage
  • adb shell dumpsys activity activities | grep 'Hist #' 其他常用的 adb 命令

查找控件

通过上面提到的 uiautomatorviewer 来查看界面中的控件 ID

resource-id 的方式比较简单,在界面中找到 resource-id 即可

find_element_by_id('com.google.android.calculator:id/digit_1')                # 通过 resource-id 来查找

同理, uiautomatorviewer 中的 text 就是要找的 name,但是测试通过 name 找失败的可能性很大。

find_element_by_name()              # 通过名字查找

同样通过 class 查找

find_element_by_class_name('android.widget.TextView')   # 通过类名查找

同样可以使用 Accessibility 来获取控件,要找的是控件的 content-desc 属性:

e_minus = self.driver.find_element_by_accessibility_id('einvernenus')
e_minus.click()

通过 uiautomator

e5 = self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"5\")")
e5.click()

模拟按键点击

在找到控件之后可以使用

login_btn.click()

模拟输入

user_input.send_keys('1234')

模拟返回键

driver.press_keycode(4)

keycode 的定义可以在 Android KeyEvent 中找到。

常用键 code

KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键 Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25

KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC 键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab 键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause 键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169

KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right

KEYCODE_0 按键’0’ 7
KEYCODE_1 按键’1’ 8
KEYCODE_2 按键’2’ 9
KEYCODE_3 按键’3’ 10
KEYCODE_4 按键’4’ 11
KEYCODE_5 按键’5’ 12
KEYCODE_6 按键’6’ 13
KEYCODE_7 按键’7’ 14
KEYCODE_8 按键’8’ 15
KEYCODE_9 按键’9’ 16
KEYCODE_A 按键’A’ 29
KEYCODE_B 按键’B’ 30
KEYCODE_C 按键’C’ 31
KEYCODE_D 按键’D’ 32
KEYCODE_E 按键’E’ 33
KEYCODE_F 按键’F’ 34
KEYCODE_G 按键’G’ 35
KEYCODE_H 按键’H’ 36
KEYCODE_I 按键’I’ 37
KEYCODE_J 按键’J’ 38
KEYCODE_K 按键’K’ 39
KEYCODE_L 按键’L’ 40
KEYCODE_M 按键’M’ 41
KEYCODE_N 按键’N’ 42
KEYCODE_O 按键’O’ 43
KEYCODE_P 按键’P’ 44
KEYCODE_Q 按键’Q’ 45
KEYCODE_R 按键’R’ 46
KEYCODE_S 按键’S’ 47
KEYCODE_T 按键’T’ 48
KEYCODE_U 按键’U’ 49
KEYCODE_V 按键’V’ 50
KEYCODE_W 按键’W’ 51
KEYCODE_X 按键’X’ 52
KEYCODE_Y 按键’Y’ 53
KEYCODE_Z 按键’Z’ 54

其他

锁屏,解锁

lock()
unlock()

隐藏键盘

hide_keyboard()

获取文件

pull_file()

推送文件

push_file()

打开任意的 activity

def start_activity(self, app_package, app_activity, **opts):
    """Opens an arbitrary activity during a test. If the activity belongs to
    another application, that application is started and the activity is opened.

    This is an Android-only method.

    :Args:
    - app_package - The package containing the activity to start.
    - app_activity - The activity to start.
    - app_wait_package - Begin automation after this package starts (optional).
    - app_wait_activity - Begin automation after this activity starts (optional).
    - intent_action - Intent to start (optional).
    - intent_category - Intent category to start (optional).
    - intent_flags - Flags to send to the intent (optional).
    - optional_intent_arguments - Optional arguments to the intent (optional).
    - dont_stop_app_on_reset - Should the app be stopped on reset (optional)?
    """

打开通知栏 Android only

open_notifications()

模拟摇晃设备

shake()

操作应用

包括关闭应用,重启应用,让应用到后台,安装、卸载应用,终止应用。

import time
import unittest

from appium import webdriver


class AppAndroidTests(unittest.TestCase):

    def setUp(self):
        # 测试初始化
        desired_caps = {
            'platformName': 'Android',
            'platformVersion': '6.0.1',
            'deviceName': 'OnePlus3',
            'udid': '2dd11c6e',
            'automationName': 'Appium',
            'app': '/home/einverne/android/ApiDemos-debug.apk',
            'appPackage': 'io.appium.android.apis',
            'appActivity': '.ApiDemos'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub',
                                       desired_caps)

        self.app_id = 'io.appium.android.apis'

    def tearDown(self):
        # 用例结束时调用
        time.sleep(5)
        self.driver.quit()

    def test_apk_install(self):
        if not self.driver.is_app_installed(self.app_id):
            self.driver.install_app("/home/einverne/android/ApiDemos-debug.apk")
        else:
            print("demo apis installed")
            self.driver.remove_app(self.app_id)

    def test_apk_close(self):
        self.driver.close_app()
        time.sleep(2)
        self.driver.launch_app()
        time.sleep(2)
        self.driver.background_app(2)
        time.sleep(4)
        self.driver.launch_app()
        time.sleep(2)
        self.driver.terminate_app(self.app_id)
        time.sleep(2)
        self.driver.reset()


if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(AppAndroidTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

点击事件

各种点击事件,包括短按,长按,滑动等等,主要注意的是,界面的坐标是向下的象限,也就是左上角是 (0,0),右下角是类似 (1080,1920) 这样的坐标。

import time
import unittest

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction


class PressAndroidTests(unittest.TestCase):
    # 主要演示点击,长按,移动等操作
    def setUp(self):
        # 测试初始化
        desired_caps = {
            'platformName': 'Android',
            'platformVersion': '6.0.1',
            'deviceName': 'OnePlus3',
            'udid': '2dd11c6e',
            'automationName': 'Appium',
            'appPackage': 'com.google.android.calculator',
            'appActivity': 'com.android.calculator2.Calculator'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub',
                                       desired_caps)
        time.sleep(2)

    def tearDown(self):
        # 用例结束时调用
        time.sleep(5)
        self.driver.quit()

    def test_press(self):
        for i in range(5):
            touch_action = TouchAction(self.driver)

            # release() 取消屏幕指针
            # perform() 执行操作发送命令
            touch_action.press(x=300, y=1700).release()
            touch_action.perform()

        e_del = self.driver.find_element_by_accessibility_id('delete')
        # tap
        time.sleep(2)
        tap_action = TouchAction(self.driver)
        tap_action.tap(e_del).release().perform()

        time.sleep(2)
        # long press
        del_action = TouchAction(self.driver)
        del_action.long_press(e_del, 2)
        del_action.release().perform()

        time.sleep(2)
        arrow = self.driver.find_element_by_id(
            'com.google.android.calculator:id/arrow')
        # move
        move_action = TouchAction(self.driver)
        move_action.press(arrow)
        move_action.move_to(x=500, y=1310)
        move_action.release().perform()

        time.sleep(2)


if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(PressAndroidTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

reference


2018-09-03 appium , android , ios , web

Certificate pinning 介绍

在抓包 Instagram 的时候发现所有的请求都被加密,即使使用 MITM 也无法查看请求内容。Google 之后发现 Instagram,Facebook 等等应用都使用了 Certificate pinning(或者也被称为 ssl-pinning) 的技术来加强通信安全。

HTTP 在 TCP 和 IP 协议之上,HTTPS 则是在 TCP 和 HTTP 之间增加了一道 SSL or TLS 协议。

市面上的各种抓包软件的实现原理就是中间人攻击。TLS 建立时客户端生成的随机数 1 服务端生成的随机数 2 都是明文的,只有随机数据 3 使用非对称加密技术加密中间人攻击的关键就是截获服务器返回的证书并伪造证书发送给客户端骗取信任,获取随机数 3,进而达成盗取信息的目的。

Instagram 在开发时就将服务端证书打包到客户端中,在 HTTPS 建立时与服务端返回的证书对比一致性,从而识别中间人攻击后直接在客户端终止连接。

解决方案

方案一

  • iOS 通过越狱安装 ssl-kill-switch2 来绕过证书验证
  • Android 通过 Xposed Module 禁用证书验证 JustTrustMe ,经过我的测试这种方式对 Instagram 已经失效

方案二

反编译高手可以拆解 apk 或者 iap 包,将客户端打包的证书替换掉,再签名,之后使用修改的包抓包

reference


2018-08-30 ssl , http , certificate , android , security

Centos 6/7 下安装 PHP7

下面记录下 Centos 6/ 7 下通过 yum 安装 php7 环境。

2015 年 12 月初 PHP7 正式版发布,迎来自 2004 年以来最大的版本更新。PHP7 最显著的变化就是性能的极大提升,已接近 Facebook 开发的 PHP 执行引擎 HHVM。在 WordPress 基准性能测试中,速度比 5.6 版本要快 2~3 倍,大大减少了内存占用。PHP7 在语言上也有一些变化,比如添加返回类型声明、增加了一些新的保留关键字等。在安全方面,去除了 PHP 安全模式,添加魔术引号等。不仅如此,新版还支持 64 位,而且包含最新版 Zend 引擎。

查看 centos 版本

cat /etc/centos-release

删除之前的 php 版本

yum remove php* php-common

rpm 安装 Php7 相应的 yum 源

CentOS/RHEL 7.x:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

CentOS/RHEL 6.x:

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

yum 安装 php7

yum install php70w php70w-opcache

安装其他插件(选装)

php70w
php70w-bcmath
php70w-cli
php70w-common
php70w-dba
php70w-devel
php70w-embedded
php70w-enchant
php70w-fpm
php70w-gd
php70w-imap
php70w-interbase
php70w-intl
php70w-ldap
php70w-mbstring
php70w-mcrypt
php70w-mysql
php70w-mysqlnd
php70w-odbc
php70w-opcache
php70w-pdo
php70w-pdo_dblib
php70w-pear
php70w-pecl-apcu
php70w-pecl-imagick
php70w-pecl-xdebug
php70w-pgsql
php70w-phpdbg
php70w-process
php70w-pspell
php70w-recode
php70w-snmp
php70w-soap
php70w-tidy
php70w-xml
php70w-xmlrpc

重启 Apache

service httpd restart

如果是 Apache + PHP 的话必须使用 PHPIniDir 指定 php5 的配置文件 php.ini 的路径

PHPINIDir /etc/php.ini

reference


2018-08-29 centos , php7 , php , apache , yum

MDX/MDD 文件格式解析

MDict 将字典定义(关键字,解释)放在 MDX 文件中,字典相关的其他资源样式文件,比如图片,发音,样式放在 MDD 文件中,虽然存放的内容是不一样的,但是两种文件的结构是一致的。

源文件格式

MDict 的 html 格式

每个项目两行

第一行是关键字
第二行开始是正文,这里的正文应该包括关键字。可以使用 html 的标记(不要包含<html>) <body></body></html>, 这个程序会自动加上,另注意在转换时要指明源数据为 html).
如果需要显示音标的话,可以利用 html 指定字体就可以显示了。

举例

Whole
<font size=5>whole</font>
<br>
<font face="Kingsoft Phonetic Plain, Tahoma">(hol,hJl; houl)</font>
</>

注意”</>”和下一个记录间不要有任何其他空行

在 html 中连接到其它关键字的方法

<a href="entry://key#section">key</a>

其中 key 是关键字,section 是对应关键字页面中的 section 名称

在 html 中嵌入图片的方法

<img src="file://abc.gif"> 或者 <img src="/abc.gif"> 其中 src 指向的文件名大小写不敏感

并将所有图片文件放在一个单独的目录中(不要与词典源文件放在同一目录中). 数据目录中可以带有子目录。在使用 MdxBuilder 制作词库时,将 Data 路径指向上面存放数据的目录,该目录中的所有文件都会被压缩到后缀名为.mdd 文件中,使用时该.mdd 文件应当与.mdx 文件在同一目录下。

在 html 中嵌入声音的方法

使用链接 <a href="sound://keyword.spx">keyword</a> 这样的形式,点击该链接的时候可以进行发音 发音仅支持.wav 和.spx 格式的音频文件

内部重定向(内容链接)

当两个关键字所指向的内容是一样的时候,可以采取重定向的方式来达到”链接”的效果。内部重定向的格式为:6

@@@LINK= 关键字

例如 color 和 colour 都指向相同的内容,制作词典时可以正常编写 color 词条,但对于 colour 词条,可以写成:

colour
@@@LINK=color
</>

当显示 colour 条目的内容时,程序会自动找到 color 的内容进行显示,链接是可以多重嵌套的。

writemdict

一个 Python 库用来将 mdx 转换为 txt 文本

一个 Python 库可以用来制作 mdx 词典


2018-08-27 python , goldendict , mdx , mdd , dict

使用 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 多核优势
  • 程序流程被事件处理切割成一个个小块,程序比较复杂,难于理解

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

相关知识点

  • 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。

File Browser 是一个用 Go 和 Vue 编写的基于 Web 的文件管理器。

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

具体 docker compose 的文件见 这里

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

filebrowser-20210827181233.png

默认的用户名和密码是 admin/admin,记得登录进去第一件事情就是修改密码。


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

Linux 下非常好用的字典 GoldenDict

最近在使用 Linux 版有道的时候发现非常卡,影响正常使用,所以就发现了这个 GoldenDict。以前在 Win 下用过 lingoes 但是无奈只有 Win 版本。有的时候也真的挺有意思,闭源的软件用着不舒服,切换到开源软件之后就像打开了新天地,从搜狗切换到 Rime 也是,开源软件不仅在功能上优于这些闭源软件,自己稍微调整一下之后就会发现体验也远超有道,搜狗之类。

GoldenDict 是一个开源词典,用 QT 编写,使用 WebKit 作为渲染核心,它像 Eudict、Mdict、Lingoes 以及 BlueDict 等词典一样可以加载外挂词典文件。基于 GNU GPL 第三版以上协议。

使用 GoldenDict 配上习惯的词典和脚本之后就再也离不开这个工具了,设置开机启动,设置 Ctrl + c两次查当前选中的词,定期的复习和整理查词列表中的词汇,这个工具完美的解决了我查词的需求,并且提供了远超出我想象的功能,中文成语,地名人名,专业术语,韩语,日语完全完全满足了所有查询的需求。

2020 年 8 月更新,让我异常惊喜的时,当我更换到 MacOS 时,GoldenDict 的 Mac 版虽然很久没有更新,但依然可以非常完美的工作,Syncthing 同步字典文件和脚本 后立马就工作,不用改变习惯,并且我也没有习惯使用 Mac 上自带的词典(虽然和系统集成得比较好,重按触摸板选中单词即可)。

2023 年 3 月更新,macOS 因为发布了 ARM 芯片的 MacBook,所以 GoldenDict 也可以选择 这个版本 ,可以在 M1,M2,芯片下运行。

安装

Ubuntu/Linux Mint 下安装非常简单

sudo apt install goldendict

功能特色

支持的字典格式

  • 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 的词法系统,用于词语的溯源及拼法建议。
  • 能够索引任意路径下面的音频文件以查找语音。
  • 弹出搜索功能:一个小窗口会弹出,用于显示在另一程序中选中的单词的词义。
  • 支持全局热键,可在任何一点触发该程序,或直接从剪切板中查找词义。

GoldenDict 开机启动

在 Linux gnome 桌面环境下,可能会发现 GoldenDict 设置选项中的开机启动是灰色的按钮无法选中。其实 gnome 自己有一个开机管理的应用叫做 startup application,在这个应用中添加 GoldenDict 即可。

GoldenDict 长句翻译问题

GoldenDict 在查词方面非常完美,但唯独在长句翻译上落后一些,但是问题不大,利用 Python脚本 添加到 GoldenDict 后整段的翻译问题也解决了。

[[202008262304-GoldenDict查长句]]

词典分组

可以在菜单栏中群组,添加群组,然后为群组增加几部字典,然后添加快捷键对字典进行分组,方便快速查阅。

比如可以将同义词词典单独分类,比如可以将常用词词典分类,方便进行查看。

字典安装

在线字典

菜单栏选择【编辑】>【词典】>【词典来源】>【网站】> 添加 > 启用 可以启用在线的字典。

欧陆

https://dict.eudic.net/dicts/en/%GDWORD%

有道的源

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%

Collins

https://www.collinsdictionary.com/dictionary/english/%GDWORD%

其他同类型的网站可以照上面的方式自行添加。

离线字典

英国学习词典五虎是牛津、朗文、柯林斯、剑桥和麦克米伦,再加上美国的韦氏学习词典,6 大学习词典。

简明英汉字典增强版

收录 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 (牛津高阶英汉双解词典)

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

牛津高阶为世所公认的权威英语学习词典,创同类词典之先河。自 1948 年出版至今,累计发行量逾 3000 万册,广受全球读者欢迎。收录 183500 单词、短语、释义:英美并重;85000 示例:英汉对照;2000 新词:如 life coach、offshoring;7000 同义词、反义词:有助扩充词汇;5000 专科词语:涵盖文理、工商、科技;700 世界各地用语:如 stickybeak、godown;2600 文化词语:如 Walter Mitty、Capitol Hill;2000 图解词语:图文并茂;400 用法说明:辨析常见疑难;130 研习专页:全面介绍英语应用知识;44 彩页:提供实用帮助;全书逾 2500 页。内容较前一版增加 20%。

这本字典和其他字典比较起来就显得非常贴近中文为母语的英语学习者了。英语解释和汉语解释都很详细。包括习语,搭配,同义等等也都有。这里就是牛津词典和其他词典不同的地方了,在牛津的版本中会出现 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

The American Heritage Dictionary 美国传统词典 英英

美国传统字典,简称 AHD。这本字典随着第五版的发布已经有 50 年的历史,经过多次的版本修订 AHD 增加了许多互联网,电子商务,电视频道等等相关的词条 1

AHD 字典的解释简单清晰,针对一些特定的词条会有用法介绍,同义词延伸等等,一句话介绍解释就是非常时候快速查词使用。

AHD 第五版出版介绍

第五版在第四版的基础上新增加了 10000 多词条和短语,超过 4000 张全新全彩的图片。为了让 AHD 紧跟前沿,第五版的出版依靠了一大群专家,学者和贡献者。成千的定义随着时间发生了巨大的变化,比如天文学,生物学,地理学等等。词典中的地图,脚注,同义,语言变化都有了增强和提高。

《美国传统词典》是美国国内非常有影响非常权威的辞典,而且自成系列.35 万个单词,3.4 万个应用实例,500 多种使用注释和新修订的词源附录,曾经被 Amazon.com 评为”编辑选择的参考工具”,是专业英语工作者必不可少的重要工具,也是广大英语爱好者的良师益友,具有非常高的权威性。《美国传统词典》收录了不少英语词根。解释词义的时候会追根溯源寻求词源、词根,可读性强,如同用偏旁部首学习汉字,这对理解和记忆是很有帮助的。所有例句力求语出有典,绝绝非一时的生造。有近义词用法说明,并且用同样有典的例句加以示范。对于渊源曲折的词有风趣而又不失严谨的注释。它是一部典型的英英辞典.它对于学习英语的重要性时非常明显的。许多英语单词都有多重词义,只有原汁原味的英英解释才能准确地道的把它们诠释出来。尤其是许多同义词之间的细微差别,用汉语很难清楚的加以区分,必须放到特定的语言环境中才能体现出来。

单词的释义通过引用经典和同时代的作家的用法变的更加简单。解释单词起源和发展的词源学被重新修订。许多单词可以通过词典的两个附录来追溯词根,这两个附录分别是古印欧语和犹太语。2

在线查词:

WordNet 3.0 英英字典

WordNet 是由普林斯敦大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。(一个多义词将出现在它的每个意思的同义词集合中)。WordNet 跟传统的词典相似的地方是它给出了同义词集合的定义以及例句。在同义词集合中包含对这些同义词的定义。对一个同义词集合中的不同的词,分别给出适合的例句来加以区分。

English Etymology

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

简单韩语字典

korean dictionary

21 世纪英汉汉英双向词典

从各个方面上来看比较平衡的字典,容量、词条量、解释都介于朗道繁体词典和牛津高阶之间。解释虽然简介但也附有许多详细的解释和例句,相比来说是较为适合大众使用。

官方介绍:

本词典的收词范围是英语基础词汇,包含了我国初级和高级中学使用的最新英语课本及旧版英语课本中的全部单词、复合词和词组;也包含了高等学校英语专业以及文、理、工科本科生在大学英语一级至六级所要掌握的总词汇;还包含了中华人民共和国国家教育委员会制定的全国各类成人高等学校招生考试复习大纲英语词汇表中所有单词和词组。此外还参考各(1)英汉部分:收入单词 15000 余条。为了方便读者学习,本部分还提供了大量的固定搭配和惯用句型。(2)汉英部分:收入汉语词条 23000 余条,除一般词语外,还收入了一些常见的方言、成语、谚语以及自然科学和社会科学的常用词组。

新世纪英汉科技大词典

该词典针对工科学生及科技者编撰,不完全统计词条总数 532388 ,如果你是个工科文艺青年,绝对不甘心于仅仅拿着 kindle 神器却看着小清新。那么本词典是您居家旅行的必备良器。有了金刚钻,你还怕揽不着瓷器活?

朗道英汉字典

实际上朗道是上海一家信息公司,名不见经转。想大家都用过金山词霸的电子辞典软件,可能也用过快译点之类的电子辞典。而朗道是国内中英文翻译软件的鼻祖。收录词汇量大。

牛津现代英汉双解词典

该词典一直被誉为“现代英语之权威”。近一个世纪以来,十次修订,与时俱进,品质更臻完美,既为全世界英语学习者的良师益友,也早已成为我国高级英语学习者首选之必备工具书。其收词多达 130,000 余条,精选新词 10,000 余条,英文释义精,中文译文规范权威,近千条实用的用法说明,大量的词源信息,还有丰富的附录,等等。

简明英汉词典

该词典是权威山寨版词典,胜在什么烂词都收,解释简单好用,如果要是做个词汇量大全,生僻词排名的话,这个词典没准能混出个水分颇多的冠军。金山词霸中默认词典即为此词典,复制一下官方介绍: 该词典是一本针对中高级水平的英语学习者的工具书,是一部针对中国人学习特点、适应英语多层次运用的词典。本词典突出现代性、实用性和简明性;力求选词实用精练,体现时代特征;例证典型地道,释义简明准确;编排科学合理,检索方便省时。其创新意识和鲜明特色,博采了中外英语词典之所长。设计新颖,视野开阔,融短语、辨析、语法、相关词、构词、助记、现代成语及用法为一体,兼具学术性、实用性、知识性和趣味性。

牛津英汉词典

这本词典是外研社从世所公认的英语词典权威出版机构牛津大学出版社引进,根据《牛津学生词典》(Oxford Student’s Dictionary) 翻译而成,是为初高中生及大中专英语学习者编纂的一部简明词典。共收词及短语 50000 余条,释义浅显易懂,简易精练;例证精当,易学易用;语法标注简明清晰,方便实用;同义词列举精益求精,利于扩充使用者词汇量;词源说明,利于使用者记忆单词。

朗文英汉综合电脑词典

码农们有福了,这是一本朗文针对计算机专业制做的英汉词典,码农们可以尝试一下,是不是好用,如果不好用的话,您说一声。我就不用了。

现代英汉词典(2001 年外研社版,kindle 正版词典)

《现代英汉词典》(新版)经过众人的通力合作和不懈努力终于问世了。现在呈献在读者面前的是一部全新的英语学习词典,它收词新、义项全、例证丰富、实用性强,能很好地满足我国中高级英语学习者的需要。 本词典注重吸收现代词典学理论的研究成果,充分借鉴国际英语学习词典的编纂经验,同时结合我国学生学习英语的特点,力求做到科学性、准确性、实用性和趣味性的完美结合。

本词典具有以下四大特色:

一、时代性强,收词广泛。本词典紧跟时代,所收词语较新,丰富全面,共收词目 38, 000 余条(不包括派生词及短语)。这些词语反映了近 10 年来科技、经济等领域出现的词汇变化。所收义项也较同类词典丰富。在拼写和注音上,本词典兼顾英国英语和美国英语的区别,采用第十四版国际音标。 二、释义准确,例证恰当。本词典释义力求准确、完整;例证,无论是英文还是中译文, 也力求恰当、贴切、地道。 三、内容丰富,针对性强。本词典例证丰富,具体说明常用词语的语义、句法、搭配、用 法等特点,有助于培养英语学习者的词汇运用能力。此外,本词典语法标注详尽,不仅对形容词用在名词前、不用在名词前、动词不用进行式、常用被动式等作了标注,还对名词用于可数与不可数、用于单数与复数等作了标注,这些有助于中国学生提高正确运用英语的能力。 四、实用性强,趣味性强。本词典提供用法说明 489 条,详解中国学生易混淆词语的用法及区别。 同时配有插图 200 余幅,有助于学习者理解词义和形象记忆,这些无疑为词典增添了实用性和趣味性。

韦氏国际词典——Webster’s Revised Unabridged Dictionary 1913『英英』

《韦氏国际词典》是美国结构主义语言学的硕果。它的篇幅极大,收词 45 万条,是最大型的单卷本英语词典。该书抱着对语言作客观的记录和描写的宗旨,有闻必录,收罗了大量的俗语(包括许多不雅的字眼)。在一段时间里这种编辑方针受到人们尖锐的批评;一二十年后争论才平息下来。

Collaborative International Dictionary of English『英英』

The Collaborative International Dictionary of English (CIDE) was derived from the 1913 Webster’s Dictionary and has been supplemented with some of the definitions from WordNet. It is being proof-read and supplemented by volunteers from around the world. This electronic dictionary is also made available as a potential starting point for development of a modern comprehensive encyclopedic dictionary, to be accessible freely on the Internet, and developed by the efforts of all individuals willing to help build a large and freely available knowledge base.

韦氏高阶英语词典——Merriam-Webster’s Advanced Learner’s English Dictionary『英英』

《韦氏高阶英语词典》是美国老牌权威的辞书出版机构梅里亚姆—韦伯斯特公司出版的一部英语学习工具书,由中国大百科全书出版社引进在中国国内出版,这是“Merriam—Webster”词典首次被引进中国,也是正宗的韦氏词典在中国的第一次授权。以此为契机,韦氏品牌旗下的相关词典将有计划地引入中国市场,形成系列化、规模化。全书收词 10 万,含 3000 核心词汇;16 万例句;22000 余个习语、动词词组、常用短语;12000 余个用法标注、注释和段落。版面字数为 1024 万字。

韦氏大学生词典——Merriam-Webster’s Collegiate Dictionary『英英』

韦氏大学生词典之所以深得美国人青睐,主要因为它具有 150 年历史,数代美国人在它的哺育下长大,它在美国的地位相当于中国的《新华字典》。曾经有人这么评论过:”韦氏词典是划时代的,它的出现标志着美语体系的独立”。GRE 考试的词汇主要依据就是美国韦氏学院辞典!根据统计比较,GRE 反义词所考短语用词大多是 M-W 词典中的原话。被认为是美式英语的典范,留学美国必备。结合新东方系列学习有奇效。

柯林斯英英字典第三版——Collins Cobuild V3『英英』

本词典属根据世界着名的三大语料库之一 COBUILD 中的英语语料库(The Bank of English)编写的工具书。词典中的例词和例句均取材于 COBUILD 英语语料库。故本词典收录了当代英语词目 75000 余条,其中 4000 余条为近年来进入英语的新词。本词典英语语料地道实用,版面新颖,语言信息特别详尽。本词典能帮助使用者扩大词汇量,不断提高口笔语能力,增强使用英语的自信心,是适合中高等程度的英语教师和学生使用的一本极有价值的参考工具书。柯林斯的特点是解释通俗易懂,每个解释都是用一句话来表达的,还有各种同意词举例,还有比如说形容词能不能用比较及,和什么介词搭配,动词能有几种句型可以使用都有说明。虽说这个词典目前已经发行到第五版,但是根据网上的评价,认为还是第三版最好。第三版的例句很多,而后面的版本开始大幅度删减例句,不只是何原因。希望喜欢韦氏词典的人都来下这个版本的 cobuild。

简明大英百科全书——Britannica Concise Encyclopedia『英英』

《不列颠百科全书》(Encyclopaedia Britannica ,简称 EB),又称《大英百科全书》,是享有盛誉的综合性英文百科全书。 Encyclopedia Britannica Online (简称 EB Online)除包括印刷版的全部内容外, 还整合了其他多个资源的信息。Britannica Concise Encyclopaedia 是《不列颠百科全书》简明版,包括 28,000 个短条目,可以迅速解答有关历史、艺术、科学等主题的问题。大英百科全书公司创立于 1768 年、距今已有 235 年悠久历史的《大英百科全书》,是全世界口碑第一、词条(Entry)最多、内容正确性最获肯定的综合性百科全书;大英百科全书公司(Encyclopedia Britannica Inc.)也以其坚强的内容编辑实力及与时并进的资料库检索科技,成为全球工具书的领导品牌。

牛津英语大词典(简编本,第五版)——Shorter Oxford English Dictionary『英英』

提到《牛津英语大词典》,研究过英语的人可能都知道语言研究与词典编篡中的历史主义原则。《牛津英语大词典》最初出版时,名称是“A Nnw English Dictionary on Historical Principles”。作为历史主义原则的应用典范,这部词典记录了自 1150 年以来的中古英语和现代的演变。可以说,它是英语发展轨迹研究的集大成者。历史主义原则在这部词典中主要表现为:收词释义尊重历史,以书证作为依据;义项排列遵循由古到今的时间顺序,词义的历史演变脉络清晰。《牛津英语大词典》自出版以来,成了英语语言的权威。但它卷帙浩繁,用“汗牛充栋”恐不足以形容其规模,作为个人藏书,多有不便。因此有人说这部词典“authoritative,fascinating,but unusable and unaffordable”。为使这部词典贴近普通读者,删繁就简、取精用弘就十分必要,因此大词典出版后不久就有了《牛津英语大词典》(简编本)(Shorter Oxford English Dictionary)。它容纳了《牛津英语大词典》三分之一以上的内容描述的是 1700 年至今所使用的英语语言。可以说,简编本是一部按历史主义原则编篡的现代英语词典。简编本在保持大词典特色与权威的同时,汲取了大词典修订项目的成果,融合了新词、新义, 反映了英语语言的新发展,具有新时代气息。

朗文当代英语词典(四版)——Longman Dictionary of Contemporary English『英英』

《朗文当代英语词典》共收词目 8 万条,其中百科词目 15000 条,篇幅逾 900 万字,是目前世界上第一部与百科全书相结合的英语学习型辞典,可以充分满足中、高级英语学习者学习语言及文化的需要。该辞典释义浅显易懂,例证典型丰富,用法说明详尽准确。其英文版问世以来,受到全球英语教学界的广泛喜爱。

不列颠百科全书——Britannica『英英』

《不列颠百科全书 (Encyclopedia Britannica)》(又称《大英百科全书》,简称 EB),被认为是当今世界上最知名也是最权威的百科全书,是世界三大百科全书(美国百科全书、不列颠百科全书、科利尔百科全书)之一。不列颠百科全书诞生于 18 世纪苏格兰启蒙运动 (Scottish Enlightenment) 的氛围中。第一个版本的大英百科在 1768 年开始编撰,历时三年,于 1771 年完成共三册的不列颠百科全书。全书约 4400 万单词,从 1768 年开始编写至今已经出版至 14 版。这套百科全书共 20 卷,字数达到 4350 万字;条目多达 81600 余条;图片有 15300 余幅。内容涵盖政治、经济、哲学、文学、艺术、社会、语言、宗教、民族、音乐、戏剧、美术、数学、物理、化学、历史、地理、地质、天文、生活、医学、卫生、环保、气象、海洋、新闻、出版、电视、广播、广告、军事、电脑、网络、航空、体育、金融等 200 多个学科。

法汉词典

该词典源于法语学习软件《我爱法语》,全本整理扩增法汉词库至 56000 单词。《我爱法语》是一款成熟的法语电子词典软件。

新德汉词典

该词典旨在帮助初学者及提高者学习德语之用,共收词条 20000 多,其中 5000 多条德语基本词含有例句或释例,同时还标明最常用词约 2000 个。其他词条也收录一些较常用的词组搭配。本词典根据德语新正字法编写而成,符合实际需要。

#### プログレッシブ英和中辞典

英語文化へ読者を招待する最良の英和辞典。  学習や実務に生きる精選された 11 万 7000 語を収録。時事語・生活語・新語・俗語の他、生命科学や金融、スポーツ用語なども追加。大学受験をめざす高校生から、新聞・雑誌を読みこなす社会人まで、幅広く使えます。

内容(「BOOK」データベースより) 総収録項目 11 万 7 千。時事語・生活語・新語・俗語のほか、生命科学・金融・スポーツ用語なども追加。重要見出し語を赤字で示し、語法・類語なども見やすく表示。定評ある語源欄をさらに目立たせ、語源的に関連のある語を赤字で示して、語彙ネットワークを立体的に構成している。 内容(「MARC」データベースより) 総収録項目 11 万 7 千。時事語、生活語、新語、俗語のほか、生命科学、金融、スポーツ用語なども追加。重要見出し語を赤字で示し、語法、類語なども見やすく表示。学習からビジネスまで対応する、1998 年刊に次ぐ第 4 版。

大辞泉

  1966 年(昭和 41 年)に企画が持ち上がった [1]。実際に出版されたのは 1995 年。カラー図版が多いのが特徴である。初版の収録語数は、約 22 万語。2003 年現在、58 万部が発行されている [1]。iPhone や iPad アプリとして「デジタル大辞泉」が発売されているほか、電子辞書にも「デジタル大辞泉」が収録されている製品がある。さらに、Yahoo! 辞書や goo 辞書、infoseek 辞書、コトバンクに「デジタル大辞泉」が提供されており無料で利用できる。

新华词典 (Chinese Edition)(2001 年修订版,kindle 正版词典)

   《新华词典》:1980 年 8 月第 1 版,1989 年 9 月第 2 版,2001 年 1 月第 3 版。主编韩作黎,曾任北京市教育局局长,全国教育学会第一、二届常务理事,北京市教育学会会长,中国作协北京分会儿童文学委员会主任,长期从事普通教育工作及儿童文学创作,对小学教育、教学和学校管理有较深研究。该词典是一部以语文为主兼收百科的中型词典,主要供中等文化程度的读者使用。

Macmillan Study 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 默认情况下是没有附带构词法规则的,所以查询单词复数等变形形式时可能会差不到,只需要导入构词法规则库就能够让 GoldenDict 自动判断复数从而进行查词。

下载 英语构词法规则库,一般下载英文的 en_US_1.0.zip 即可:

然后在 编辑 ->词典 ->词典来源 ->构词法规则库 中设置规则目录,在我的电脑上是 /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

  1. https://book.douban.com/subject/1362017/ 

  2. https://book.douban.com/subject/5986128/ 


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

电子书

最近文章

  • 给网站加上实时聊天对话框 tawk.to 使用记录 tawk.to 是一个可以在网页上添加客户聊天对话框的应用。用户可以通过 tawk.to 泡泡快速地得到支持。
  • 下载 YouTube 视频方法总结 之前就简单地介绍过使用yt-dlp 来下载 YouTube 视频,yt-dlp 是自从 youtube-dl 不再更新之后有人接手开发的新工具。但这篇文章重点是在于下载 YouTube 视频,我会整理一下我目前了解的所有可视化,命令行,Telegram bot 等等工具。
  • Tailscale 出口节点功能配置流量出口 之前的文章中介绍过 Tailscale ,是一个功能非常强大的虚拟组网的工具,底层使用更高级的 [[WireGuard]] 协议进行通信。之前的文章中只简单的介绍了一下 Tailscale 的使用,但是过去的时间里面 Tailscale 又更新了很多的新特性,这篇文章就介绍其中的一个特性 Exit Nodes。
  • Porkbun 免费领取一年 app wiki 等域名 [[Porkbun]] 通常被人戏称为「猪肉包」,是一家新成立于美国俄勒冈州波特兰市的域名注册商,母公司是 Top Level Design,后者是 design, ink 和 wiki 三个顶级域名后缀的管理局。这家域名注册商虽然成立时间比较短,但是胜在价格实惠。短短几年时间就打开了知名度。
  • 《负动产时代》读书笔记 怎么知道的这一本书