玩部落冲突(Clash of Clans)也已经四个多月了,这是我第一个花钱在上面的游戏,不过最近因为给别人看COC乱点花了我1200左右的钻石,顿时玩下去的信心都没有了,既然没有动力了,就来总结一下吧,就当是个结束。
很早知道这个游戏,看到很多人玩,包括很多身边的同学。但是机缘巧合有一好友也开始玩,就带着我一起开始玩了,于是从暑假开始,到今天11/5,差不多正好4个月时间,除了魔兽争霸这个游戏,还真没有一个游戏能让我坚持玩这么长时间的。什么吸引我呢?这个游戏依靠策略,攻打的策略,守家的策略,让人欲罢不能。另外就是好友及部落机制。再次就是不想偷菜种菜那么没有头脑,收集金币及圣水都是需要一定的技巧。虽然被人乱点坑了很多金币,并且不得不赞扬游戏公司对游戏参数的设置,让人无比的想花钱,并且会让人觉得花的很值得。
8本阵型
双菱形
##一些网站 YouTube Channal https://www.youtube.com/channel/UCxNMYToYIBPYV829BJcmUQg 这个频道从低等级开始,一步一步升级,单人模式,攻击策略,防御策略很全面,可以关注。
之前几个布阵的网站都是直接从Google点进去的,根本记不住网址,所以用Google喽搜喽。
##关于钻石 关于钻石,网上很多说免费的钻石的,千万别信,基本都是假的,稍微真的就是去赚礼品卡的钱,然后用礼品卡买钻石。游戏中成就和清理地面的灌木石块等等都能获取一定的钻石,所以省着点用很快能够买到第三个农民500钻,等第四个农民1000钻其实也应该很快,如果不出意外2000钻的第五个农民我马上也能有了,只是。。。。
最后有一点,我在升级过程中吃了很多苦头,就是千万不要着急升级大本营,COC匹配对手有一定的算法,当时也Google了,会根据一定的算法,等级越高越不好打,所以最好在每一个大本营造完全不建筑并且升级到最高等级不能升级再升大本营。
##一些技巧
参考:
推荐网站之求字体:通过图片找到对应字体。
最早遇到这个问题是我当时看陈墨评金庸系列书籍的时候封面上很漂亮的字体,下图中很大篇幅的小字。
当时我还没遇见这个求字体网站,我是直接在百度知道问的别人,正好还有人知道,当时就记住了这个字体—-超世纪粗行书。 今天看到别人在摄影上加上了很好看的Logo,不禁想知道中文的字体,于是找到了这个网站。使用体验都很好,因而推荐出来。
Rime IME 是中州韻輸入法引擎 (Rime Input Method Engine) 的缩写,项目网址如下:
按照官网给出的定义:Rime 不是一种输入法,是从各种常见键盘输入法中提炼出来的抽象的输入算法框架,这一套框架提供的灵活扩展性使得其不仅可以支持全拼,双拼等等中文输入,还可以扩展词库进行任何语言的输入,Rime 涵盖了大多数输入法的共性,所以在不同设定下,Rime 可化身为不同的输入法用来打字。Rime 是跨平台的输入法软件,Rime 输入方案可通用于以下发行版:
~/.config/fcitx/rime/
~/Library/Rime/
很多东西看官方的 wiki 就能看明白,希望在你继续看下去之前,先看完下面几个网址:
相信如果你看完了官方的文档,应该对 Rime 的安装和配置有了一定的了解,相信你在看得过程中也已经把 Rime 对应的版本安装上了,不同发行版的配置目录不同,通过 yaml
文件来配置,本文就在官方文档的基础上调整了一些配置来适应我的习惯。你不一定要完全按照我的配置来,不过我相信读完这篇文章,你一定能够随心配置出适合你自己输入习惯的 Rime。
下面的文章不是一篇入门的文章,你可能需要自行先阅读官网提供的 Wiki,以及自行安装上 Rime 体验一下之后,再阅读后面的内容。
关于安装本来不想多说什么,基本上都是非常简单的,但是在 Linux 上的一些使用经验告诉我,Linux 发行版上的 Rime,fcitx-rime 要比 ibus 版本的要好用,虽然官方建议的是 ibus 版本,但是我还是建议你使用一下 fcitx 版本的,并且结合 fcitx 的扩展会开启一个新的世界,比如自带粘贴版历史(Ctrl+;
),自带日韩语输入,这一切会让使用体验上升一个高度。
sudo apt install -y fcitx fcitx-rime
更多发行版见官网
在 macOS 上直接通过 Homebrew 安装:
brew cask install squirrel
或者从源码自行编译安装:
在初了解 Rime 的时候经常会被 Rime 中的几个输入方案的名字搞混,其实这三个方案 朙月拼音
,以及该方案的简体字版本,语句流版本都是同一个方案,不过在体验上略有差别,「语句流」风格的输入方案,在空格确认后,字词并不立即上屏,而是在输入句末的标点或者按下回车时整个句子才上屏。
安装完之后, fcitx-rime
的大部分的配置文件在 ~/.config/fcitx/rime
下,如果是 ibus
版本,将对应的 fcitx 替换成 ibus 即是配置地址,如果打开该目录能看到一系列默认配置:
default.yaml
: 全局配置weasel.yaml
: 发行版配置,比如 Windows 下就是 weasel, macOS 下面就是 squirrel.yaml
installation.yaml
: 安装信息,包括了输入法的前端发行版,版本,安装时间,安装的ID,rime 的版本,以及最重要的输入法数据备份路径等*.schema.yaml
: 各输入方案的配置文件,一般认为 schema 前的是输入方案的名字,一个输入方案可能对应多个字典user.yaml
: 用户状态用户自定义:
*.dict.yaml
: 用户字典*.custom.yaml
: 用户对 default.yaml
, *.schema.yaml
等配置文件进行修改的配置文件修改 Rime 配置文件并使之生效的方法很简单,保存文件,在 Rime 菜单中点击部署,就可以立即看到效果。Rime 建议使用 *.custom.yaml
的方式来自定义配置,因为 Rime 升级时会覆盖 Rime 自己的默认配置文件。
如果配置了同步目录,那么在同步目录能看到
*.userdb.txt
: Rime 会自动在一定时间后将用户的输入习惯生成快照文件,记录在 userdb.txt
文件中,分别记录了该输入方案下用户输入的历史纪录,备份级别:重要,具体文件内容解析可以参考后文UUID/
: 用户配置同步目录虽然现在很多手机上的输入法支持双语输入,但是桌面版的输入法除了搜狗,其他真的做的不行,但是 Rime 支持很多种双语切换时的处理方式。比如某些情况下一直在输入中文,但是中间要输入英文,通常的做法就是按下 Shift 来快速切换到英文模式,那么这个时候,如何处理已经输入的内容,Rime 提供了如下的配置:
inline_ascii
: 在输入法的临时英文编辑区内输入字母、数字、符号、空格等,回车上屏后自动复位到中文commit_text
: 已输入的候选文字上屏并切换至西文输入模式commit_code
: 已输入的编码字符上屏并切换至西文输入模式clear
: 丢弃已输入的内容并切换至西文输入模式noop
: 屏蔽该切换键具体设置如下:
ascii_composer:
good_old_caps_lock: true
switch_key:
Caps_Lock: noop
Eisu_toggle: clear
Shift_L: commit_code
Shift_R: commit_text
Control_L: commit_text
Control_R: noop
在这样的配置下,比如我已经输入了 vim
,但是输入法并没有 vim
的候选词,这个时候我按下左 Shift
,Rime 会按照配置,执行 commit_code
,也就是将输入的 vim
上屏,并切换到英文输入模式。这是我一直比较习惯的用法。
在设置自定义键的时候左右 Shift
和 fcitx
的快捷键有冲突。fcitx
设置中 额外的激活输入法快捷键
的 双侧 Shift
改掉或者禁用。
对于左 Shift
是将候选词上屏,Enter
则是将输入的内容原封不动上屏,和我之前的习惯保持一致。
要扩展 Rime 的词库,就必须要先知道 Rime 中词库的分类,Rime 中词库有两大类,一类是 *.dict.yaml
文件编译后生成的 *.table.bin
文件,这一类被称为固态词典,另一大类是用户输入习惯词典,一般保存在 *.userdb
文件夹中。固态词典不会随着用户的输入而发生变化,用户可以通过更改 dict.yaml 文件,然后重新部署生效,而用户词典则会随着用户的输入而发生变化,从而影响候选词的位置。用户词库会在同步时合并到 *.userdb.txt
文件中,并同步到配置的同步文件夹中,从而做到跨设备的同步。
Rime 自带的联想词库有其自身的局限,但是 Rime 可以支持扩展词典,在 Rime 配置目录下新建 *.dict.yaml
这样的文件:
luna_pinyin.mywords.dict.yaml
在文件中输入
# Rime dictionary
# encoding: utf-8
---
name: luna_pinyin.mywords
version: "2019.08.23"
sort: by_weight
use_preset_vocabulary: true
# 從 luna_pinyin.dict.yaml 導入包含單字的碼表
import_tables:
- luna_pinyin
...
# table begins
# 自定義的詞條
中州韵 zhong zhou yun 1
小狼毫 xiao lang hao
自动注音的词
这里需要注意的是 Rime 的码表,是 Tab 分割的三列,分别是文字、编码、使用频次,编码的定义以音节加空格分割。在制作自己的码表时一定要注意使用 Tab 分割。
编辑文件 luna_pinyin.custom.yaml
patch:
translator/dictionary: luna_pinyin.mywords
部署,就可以快速导入到 Rime 中。
部署之后尝试输入词库中任意一个比较复杂的词,理论上应该看到正确的词出现,否则可能词库未加载成功,那么需要到 /tmp/rime*
目录下查看 ERROR 日志。
关于如何制作自己的词库,后来我又写了一篇文章,可以参考这里
在最开始的时候我最没有明白的一个配置就是 Rime 的同步机制,后来发现在 installation.yaml
文件中配置:
sync_dic: "/path/to/rsync"
installation_id: "mint-config"
然后点击 Rime 图标,部署,同步,这样用户配置和词库都会在配置的同步路径中。如果不修改 installation.yaml
配置,那么 Rime 默认会生成一个 UUID 的目录来存放同步文件
如果更换了电脑,将同步文件同步下来,然后配置 installation.yaml
,执行部署,同步,部署,然后配置、用户词库都可以了。
不同电脑之间的同步内容会以 installation_id
为名生成一个文件夹,文件的配置不会相互互通,但是用户字典是会同步的。
简单地来描述 Rime 的同步机制就是,不同电脑都会在同步目录中新建一个自己的 UUID 或者指定名字的目录,该目录下会保存所有自定义的修改,包括用户输入习惯的字典 *.userdb.txt
.
在点击同步时,Rime 会,会把同步目录中其他的 userdb.txt
合并:
sync/*/*.userdb.txt = 合并到 => 本地 *.userdb = 导出为 => sync/<installation_id>/*.userdb.txt`
其他电脑 = 複製來或從網盤同步下載 => sync/<installation_id>/ = 本地同步 => sync/<installation_id>/ = 複製走或同步上傳到網盤 => 其他电脑同步
也就不需要手动去合并字典,只需要在合适的时机同步一下目录即可。Rime 会自动处理 userdb.txt
的合并问题。
不过需要注意的是 Rime 虽然会将自定义配置及词库同步到目录,但这只是一个单向的同步,其他机器依然需要手动处理自定义配置及词库。
在同步后可以在同步目录观察到 *.userdb.txt
每一种输入方案都会对应一个这样的文件,其中保存的是用户的输入历史,打开文件看很容易可以猜测到每一行中的含义:
# Rime user dictionary
#@/db_name luna_pinyin.userdb
#@/db_type userdb
#@/rime_version 1.2.9
#@/tick 425369
#@/user_id mint-config
a 吖 c=14 d=4.71446e-09 t=425369
a 呵 c=1 d=6.28595e-10 t=425369
a 啊 c=8781 d=3.80755 t=425369
解释:
c
输入法 commit 的次数 1,这个数可能因为输入时删除掉前面的词而减少,或者如果用户手动 shift+delete
删除掉候选词也会 reset 成 0d
权重,结合时间,综合计算一个权重,随着时间推移,d 权重会衰减t
时间,记录该候选词最近一次的时间Rime 有一些默认设置,比如上下键选词,但是很少人打字的时候会把手移动到上下键去选词。
这里记录一下我自己的一些适配,用以调整我的习惯。
在修改 Rime 配置是,可以打开 Rime 的日志,对于我使用 fcitx-rime ,那么对应的日志在
/tmp/rime.fcitx-rime.*
一般有 ERROR,WARNING, INFO 三个文件。每一次部署时最好同时开着文件观察错误情况。
在 ~/.config/fcitx/rime
配置目录下,vi default.custom.yaml
patch:
schema_list:
- schema: luna_pinyin
- schema: luna_pinyin_simp
- schema: luna_pinyin_fluency
menu:
page_size: 6
自定义其中的 page_size
即可。
Rime 自带繁简切换,菜单中 (Ctrl+grave) 就可以设置。
Rime 自带
将 https://gist.github.com/2320943 作为模板保存到 luna_pinyin_simp.custom.yaml
、 luna_pinyin_tw.custom.yaml
或 luna_pinyin_fluency.custom.yaml
即可。
对于模糊音设置,官网有介绍 luna_pinyin 的实现方式
对于我,这条加上还是很有必要的
in
和 ing
参考链接
配置英文字典,自定义名叫 english 的 translator,然后把这个 translator 添加到数据方案中。
# 加載 easy_en 依賴
"schema/dependencies/@next": easy_en
# 載入翻譯英文的碼表翻譯器,取名爲 english
"engine/translators/@next": table_translator@english
# english 翻譯器的設定項
english:
dictionary: easy_en
spelling_hints: 9
enable_completion: true
enable_sentence: false
initial_quality: -3
注意这个时候需要 Rime 的配置目录中有 easy_en.dict.yaml
这个码表文件。
安装完 Rime 后,会安装 /usr/bin/rime_dict_manager
工具和 /usr/bin/rime_deployer
工具。
在运行这两个工具前需要关闭正在使用的 Rime 输入法,否则会占用需要的文件,而出现错误:
E0114 17:38:47.016017 9869 level_db.cc:291] Error opening db 'luna_pinyin.userdb' read-only.
管理工具,在 fcitx 的配置目录 ~/.config/fcitx/rime/
下运行
rime_dict_manager -l
会列出当前输入法配置方案。
导出词典
rime_dict_manager -e luna_pinyin export.txt
完整参数:
➜ /usr/bin/rime_dict_manager
options:
-l|--list
-s|--sync
-b|--backup dict_name
-r|--restore xxx.userdb.txt
-e|--export dict_name export.txt
-i|--import dict_name import.txt
看名字就知道 rime_deployer
是用来管理 Rime 部署相关操作的。
完整参数:
➜ /usr/bin/rime_deployer
options:
--build [dest_dir [shared_data_dir]]
--add-schema schema_id [...]
--set-active-schema schema_id
--compile x.schema.yaml [dest_dir [shared_data_dir]]
自动生成主题皮肤
material 质感的主题,很好看
fcitx 官方制作
Linux 终端配置 Rime 工具
OS X:
到这里,就会发现 Rime 已经能够满足日常的需求,我用全拼,培养一段时间之后词库也很满足我的需求了。而到搜狗官网去看其介绍,细胞词库,云端输入,自动纠错,多彩皮肤,长词联想,网址输入,大部分的功能 Rime 都能做到,并且没有隐私问题,数据完全掌握在自己手里何乐而不为。
之前一直使用 Google 拼音输入法,Google 拼音输入法能够导出一套用户长期积累的词库。我利用“深蓝词库转换“工具将 Google 拼音输入法导出的词库,大概 7 万多条转成 Rime 词库格式。然后开始菜单调出,小狼毫用户词典管理,选中 luna_pinyin
,点击“导入文本码表”导入词库。瞬间就可以从 Google 拼音输入法转移到 Rime 输入法。导入文本码表只是针对 Google 拼音输入法中由用户积累的词汇。一般只建议将最为关键,带有词频信息的词库使用“导入文本码表”的方法导入到 Rime 输入法。
关于词库,Rime 输入法的词库有两部分组成。以下摘自贴吧:
佛振在设计用户词典时,没有考虑到有导入大词库的需求,就按照估计用戸可能积累起来的词彚量,把容量设置为「十万」规模以提升存储效率,超过这个量,性能则会下降。
佛振设计「【小狼毫】用戸词典管理」的初衷和真正目的,在於譲大家将自己従其他输入法中积累出来的用戸词彚,可以顺利地迁移到 rime 中。而不是譲你把其他输入法整个系统词库都搬进来。如今,「【小狼毫】用戸词典管理」这个功能和界面,已经被众多的小白同学稀里糊涂地滥用了。
如何正确的导入词库?
答:新增固态词典引用多份码表文件
过去一直没有简易的批量添加词汇做法,现在可以这样做:以【朙月拼音】为例,在输入方案裏指定一个新的词典名为
luna_pinyin.extended.dict.yaml
#luna_pinyin.custom.yaml
patch:
translator/dictionary: luna_pinyin.extended
然后在用户目录创建一个词典文件 luna_pinyin.extended.dict.yaml
#Rime dictionary
---
name: luna_pinyin.extended
version: "2013.04.22"
sort: by_weight
use_preset_vocabulary: true
import_tables:
- luna_pinyin
...
# table begins
鸹鸹! gua gua 100
这样一来,部署【朙月拼音】这个输入方案时,将编译 luna_pinyin.extended
这部词典,而这部词典除了导入【八股文】词汇表之外,还导入了名为 luna_pinyin
的词典文件,即 luna_pinyin.dict.yaml
。被导入的词典文件只取其码表,忽略 YAML 段。
被导入的码表与本词典自带的码表共同决定了编码集合。当然也可以:本文件的码表完全为空,只用来按需合并多个外部码表文件。
luna_pinyin.extended
这个词典的神奇之处是:虽然luna_pinyin.schema.yaml
已设置为加载名为 luna_pinyin.extended
的词典,但配套的用户词典名却是「luna_pinyin
」,即 Rime 自动取句点之前的部分为用户词典名,以保证按以上方法增补了词汇之后,不至於因为改变词典名而抛弃原有的用户词典。
请注意,此法的设计用途是合并编码方案相同的多份词典文件,而不是用来将不同的编码混在一起。
具体的示例代码可参考 https://gist.github.com/lotem/5443073
其中心思想提炼出来就是:
gist.github.com
上的示例中是 luna_pinyin.kunki.dict.yaml
),即给输入方案luna_pinyin
(明月拼音)打一个补靪,将调用的词库重置为luna_pinyin.kunki.dict.yaml
。luna_pinyin.kunki.dict.yaml
的文件,加入好你需要导入的词彚(如「瑾昀」等等)。并导入内置的系统词库(import_tables: luna_pinyin
)。其实佛振import_tables
的这个做法,頪似於 C 语言编程中的 #include
头文件。其目的和工作机制都是一様的。目的是引用头文件(或是系统预设词库)竝添加上自己的内容;工作机制是在编译(或是重新部署的时候),将链接到的不同的文本文件合并成一个文件,并処理成二进制文件。
我另外要在佛振同学的基础上补充几点
luna_pinyin.custom.yaml
和 luna_pinyin.extended.dict.yaml
都要放入用戸文件夹中import_tables
的方法,不仅仅可以导入预设的词典,甚至可以导入其他的自定义词典以笔者为例子,我在朙月拼音输入方案中设定的词库名叫 luna_pinyin.extended.dict.yaml
。
而我 luna_pinyin.extended.dict.yaml
在文件头部分,除了系统预设词库之外,还导入了其他的细胞词库
import_tables:
- luna_pinyin
- luna_pinyin.extra_hanzi
- luna_pinyin.sgmain
- luna_pinyin.chat
- luna_pinyin.net
- luna_pinyin.user
- luna_pinyin.cn_en
- luna_pinyin.website
- luna_pinyin.computer
- luna_pinyin.place
- luna_pinyin.shopping
- luna_pinyin.sougou
- luna_pinyin.kaomoji
- mywords
码表中的词彚格式
3.1 码表文件必须是 utf-8
无 bom 的编码。不能用 ansi,否则出来的词彚会乱码
3.2 Rime 对词彚的格式有着厳格的限定,其标凖形式是「词彚<tab>ci hui<tab>100
」(方引号内部的部分,<tab>
表示制表符(顕示为空白字符,不是空格))。
拼音码表的词彚格式是一个词彚占一行,不同的属性之间以制表符为间隔,编码之间以半角空格为间隔。従左往右依次是词彚、编码、词频。其中编码和词频是可省略的。也就是说
「词彚<tab>ci hui
」、「词彚<tab><tab>100
」、「词彚
」
都是合法词库文件格式。
如果词频省略,那麼输入法会优先调用「八股文」(一个预设的中文语言模型,包含词彚和词频两穜属性)的词频,如果八股文找不到该词彚的词频,那麼这个词彚的词频就当成 0 来処理。
如果编码省略,那麼输入法在重新部署,将文本码表生成固态词典的时候,会根据词库中的单字来给词彚自动编码(如果是拼音的话,叫「给词彚注音」更妥帖) 比如词库中有
我<tab>wo
和<tab>he
你<tab>ni
我和你
四个 item,那麼「我和你」这个省略了编码的词彚在生成固态词典的时候会自动被注音上「wo he ni」。其中有一个特别需要注意的地方,那就是処理多音字。对於含多音字的词彚,我们要侭量避免譲输入法给他自动注音,因为会帯来错误的读音(比如「重庆」读成「zhong qing」)所以一般含多音字的词彚都要最好标注上读音。如果实在没辧法弄到读音也没関系。因为 Rime 已经给多音字的罕见音做了降频処理。従而使得多音字的罕见音不会参与词彚的自动注音。
関於自动注音的具躰的细节可以看 rime 的 wiki,这裏我就不多说了。総而言之,我廃话那麼多,是为了譲大家了解 rime 词库的工作机制,其実就为了告诉大家两句话:「在导入词彚的时候,一般来说只要加纯汉字就够了。含多音字的词,系统词库一般都有,如果没有才要考虑给这个词注上音。」
另外,系统词库中,已经包含了完整的单字注音和罕用读音降频処理,大家可以放心地导入纯汉字词彚,不用太过担心。(所以一定给要记得import_tables: luna_pinyin
,来使自定义码表获得系统词库中的单字注音、含多音字词彚注音以及系统词彚词频)
关於楼主配置的多个词库挂接的方法实例,可参考由 rime-aca 友情提供的「朙月拼音·扩充词库」
下载地址:https://bintray.com/rime-aca/dictionaries/luna_pinyin.dict
参考:
# weasel.custom.yaml
patch:
"style/font_face": "华文行楷" # 字體名稱,從記事本等處的系統字體對話框裏能看到
"style/font_point": 16 # 字號,只認數字的,不認「五號」、「小五」這樣的
style/horizontal: true # 候選橫排
style/inline_preedit: true # 內嵌編碼(僅支持 TSF)
style/display_tray_icon: true # 顯示托盤圖標
Rime 最让我惊讶的是还支持一些常见的快捷键操作,通过配合这些快捷键可以在输入很长一段句子的时候提升体验。
ctrl+grave
(grave) tab 键上面,1 左边的那个键用来切换 Rime 输入方案shift+delete
删除选中的候选词,一般用来调整不希望在候选词前的词ctrl+ n/p
上下翻页选择候选词Ctrl+b/f
类似于左箭头,右箭头,可以快速调整输入,在输入很长一段后调整之前的输入时非常有效Ctrl+a/e
贯标快速跳转到句首或者句末Ctrl+d
删除光标后内容Ctrl+h
回退,删除光标前内容Ctrl+g
清空输入Ctrl+k
删词,等效于 Shift + delete(macOS 上可以使用 ⌘+k)-/+
或者 tab
来翻页更多的快捷键可以在 default.yaml
配置中看到。
遇到 Rime 在 Deploy 字典时
Encode failure:
的问题,这些字典中的字符可能存在问题。
代办事项中一直存在这样一个列表,一直没有完全吸收,这里先列着慢慢消化吧。不过大多数情况下都是直接豆瓣搜索看评价看了,也没有来得及维护这个列表,找个时间整理成豆列吧。
计算机系统与网络
编程通用
算法与数据结构
职业修炼与规划
大师访谈
架构 / 性能
Web 前端
Java 开发
.NET
Python
Android
iOS
PHP
C 语言
C++
机器学习和数据挖掘
数据库
测试
项目与团队
求职面试
编程之外
《如何把事情做到最好:改变全球 9800 万人的人生指导书》
要给哥弄个 Nexus 5,网上一查有美版的 D820,还有国际版的 D821。顺手做个笔记LG D820 VS LG D821。两个版本的 LG Nexus 5 在几乎所有的配置和外观上都没有任何的区别,主要区别在通讯模块上,一个支持 GSM/CDMA/WCDMA/LTE,而另外一个不支持 CDMA,具体的支持情况外媒梳理如下:
##北美 Nexus 5 版本 (LG D820):
##Nexus 5 国际版本,没有 CDMA (LG D821):
D820 能够兼容 AT&T、T-Mobile 和 Sprint 的 2G、3G 和 LTE 网络;而 D821 则可兼容欧洲、亚洲等其余地区的网络频段。
D820 美版需要破解才能电信 4G,D821 支持联通 4G,中国移动所使用的是特有的频段,不支持
##D820(H)、D820(E)、D820(S) 区别
D820(H)、D820(E)、D820(S) 三者其实硬件都是一样的,就是 RAM 颗粒使用得不一样而已。 D820(H) 是 Skhynix(海力士)的 RAM 颗粒,D820(E) 是 Elpida(尔必达)的 RAM 颗粒,D820(S) 是 Samsung(三星)的 RAM 颗粒。查了下 LG 的内部资料,貌似 D820(S) 故障率最高,无故黑砖的同学警惕是否买到 D820(S) 的机器~
查看 D820(H)、D820(E)、D820(S) 方法~关机后,按音量“-”以及开机键同时开机,然后进 bootloader 查看~
参考:
这个插件顾名思义,就是扩展了 vim 中 .
的功能,有些插件实现的复杂修改(比如修改 surrounding) 用原生的 .
无法实现,而用该插件可以实现。
Plug 'tpope/vim-repeat'
既然提到了 vim.repeat
就不得不提到 vim 的 .
操作。
diw
删除了一个 word,那么可以使用 .
来删除另一个 worddd
删除了一行,那么可以使用 5.
来删除 5 行hello!
,那么使用 ESC 进入 normal 模式,那么移动光标,在另外一个地方使用 .
可以快速输入 hello!
而如果使用 :help repeat
就会发现 vim 支持的 repeat,日常使用的 .
只不过是冰山一角。.
被叫做 single-repeat,vim 还支持
等等复杂的 repeat commands。
vim 中的 multi-repeat 其实日常中也非常熟悉,比如 :2,5g/^$/d
这种类似的命令就被叫做 multi-repeat. 解释一下这个例子,就是从 2 到 5 行中匹配 ^$
(也就是空行) 的内容执行命令 d
(删除)。
恢复到这个命令最原本的模式
:[range]g[lobal]!/{pattern}/[cmd]
这条命令的也是就是在行数范围 range 的行上,匹配 pattern 的行,执行 Ex command(默认是 :p
)
:[range]g[lobal]/{pattern}/[cmd]
这条命令的也是就是在行数范围 range 的行上,不匹配 pattern 的行,执行 Ex command(默认是 :p
)
:[range]v[global]/{pattern}/[cmd]
同 :g!
几点说明:
/
可以使用其他非字母单字节字符来替换,比如使用 \
, "
, |
, 等,这种方式使得可以在 pattern 中直接使用 /
cmd
是 vim 的 Ex cmd,使用 :help ex-cmd-index
来查看:d
delete lines:g
execute commands for matching lines:grep
run ‘grepprg’ and jump to first match:help
:insert
:ls
:m
move lines:new
create a new empty window:w
write to a file:wq
:x
:z
比如替换文本中所有 pat 为 PAT
:g/pat/s//PAT/g
同样也可以使用 :%s/pat/PAT/g
g
命令是一个非常强大的命令,更多的可以参考下一章节的 g
使用。
更为复杂的 repeat ,那就需要使用到 vim 内置的 register 0-9a-zA-z"
,
q{0-9a-zA-z"} " 来开启录制
q " 之后使用 q 来停止录制
@{0-9z-aA-Z".=*+} " 执行 Register 中的内容,`%` 当前文件名,`#` 可选文件名,这两个 Register 不能使用
@@ " 执行上一次
delete all line match pattern
:g/pattern/d
delete all lines not match pattern
:g!/pattern/d
:v/pattern/d
copy all match lines to the end of file
:g/pattern/t$
move all match lines to the end of file
:g/pattern/m$
copy all lines matching pattern to register ‘a’
qaq:g/pattern/y A
说明:
qaq
清空 Register a:help :y
), yank the current line into register A (append to register a)reverse entire file
:g/^/m0
前一天就看到Rumor说Google有一款inbox产品要发布,没想到今天一早就看到+Sundar Pichai 发了一Po 说发布这个产品了。第一时间申请了邀请码,可是到目前为止也没见邀请码的踪影,也就只能从一些介绍,截图,视频中看到一些端倪,也由此写下一些想法。
##改变
Gmail发布已有10年,这十年时间Gmail改变了人们使用邮箱的习惯,而这十年变化的东西太多了,邮箱这一概念早被人说是应该淘汰的东西,时至今日邮箱却依然还是日常生活,工作交流中很重要的一个环节,可是邮箱亟需要变革,不仅是作为用户而言,并且是邮箱服务提供商应该需要思考的问题,越来越多的垃圾邮件,越来越多的不必要的邮件出现在用户的收件箱。而今天Gmail团队给自己的服务一个evolution,虽然Gmail已经在不久前启用了分类服务,能够帮助过滤一些无用的邮件,但可能Gmail团队觉得还不够,他们要以一种智能的方式帮助用户收发邮件—-他们在官方博客上这样说:designed to focus on what really matters. 用户只需要关注他们真正需要关注的。改变总是好的,无论这个改变是好是坏,改变意味着不满足与现有的状态,期望以一种理想的状态而活着。所以无论这个服务是否会像waze失败,最后总会有收获。
图片来自Verge
##UI设计、功能变革 那就来看看这个服务让人耳目一新的功能,首先让人眼前一亮的就是UI的设计,无论是Web还是移动端,简直就是Material Design的推广,靓丽的颜色配合着无比流畅的动画,首先让使用者的体验就很爽朗。其次就是博客中宣传的:Bundles,Highlights,Reminders, Assists, and Snooze,这三个功能构成inbox的主体,虽然Bundles就是Gmail中的不同Tab分类,Highlights应该也就是Gmail中的星,Reminders,Assists,and Snooze也就是Gmail中的工作表,可是inbox给使用者的感受是不一样的,让我想到的第一个词语就是GTD,getting things done. 这个词我第一次接触是在本科上的一门校外选修课上老师讲的。邮箱的作用难道不是这个吗?原来我们转了大大的一圈又回到了邮箱最原始的作用,帮助工作生活交流,Gmail原来一种时间乱糟糟的顺序给我们安排,而inbox是以一种事情重要程度,get more import things done first.
##背后算法 说到inbox这里,就不免让我想起Google Now,想起Andrew Ng的机器学习,Google Now是Google推出的个人助手,机器学习是一门公开课,我们这学期也在学,inbox能够提供这样的一种服务,Google要在背后做的运算是及其大的,如果要做的更加智能要做的或许更多,一封邮件重要与否,一封邮件对于某一个个人重要与否,都需要背后很强大的算法计算得出。而同样你得提供更多的数据,所谓的给予的多,收获的更多。当然这只是我片面的想象,背后的数据谁也不知道,除非你去问Google的employee们。
##inbox展望 inbox作为Gmail的一个革新,无论如何我都是期待的。目前我还没用过还不知道真正的使用体验也就不好说什么了。只是Google各种产品的混乱逻辑也我也弄不清楚了,虽然Gmail一直有工作表这样的功能,但却把GTD的功能做的很烂,虽然之前的keep也有GTD类似的功能,却放在类似记事本一样的笔记类应用中。当然那些产品加上那些功能也不是多此一举,却一时间让人无法选择。我原本以为所谓的inbox应该是所有服务的一个inbox,当然Gmail是最最最重要的一个inbox,而Google+的通知呢?在Web上无处不在的通知难道不应该出现在inbox中?Blogger的评论呢?YouTube制作者的评论呢?或许那死了的Reader还有那个你关注的博客又更新了一篇文章呢?我原本以为的inbox是那样的,最后的结果是我真的想多了。 但转念一想,或许不久Google Now能够给我们提供吧,期待未来。
使用智能手机的朋友会发现,在手机信号旁边或者上面都会有一些奇怪的字母,比如3G、E、H等等,这些字母都代表什么意思呢?哪种网络状态速度最快?下面让我们详细了解一下吧!
G指GPRS,它是GSM移动电话用户可用的一种移动数据业务,GPRS可说是GSM的延续,是2.5G网络。在iPhone手机上显示O;2.5G的速度约为10KB/s
E指EDGE网络,是增强型数据速率GSM演进技术,属2.75G,速度约为20KB~30KB/s
3G指普通3G网络,在国内常见的3G有电信的CDMA2000、联通的WCDMA和移动的TD-SCDMA三种,速度在2-7M;
H见于联通的WCDMA手机上,指3G的升级版HSDPA网络,是3.5G,速度可达14.4M;
H+常见于中国联通的WCDMA手机上,hsdpa的升级版HSPA+,是3.75G,速度可达21M-42M;
从网络速度对比来看,从慢到快依次是 G<E<3G<H<H+
。
日常生活中,在使用手机的过程中,我们常常可以在屏幕的状态栏上方看到网络信号的标识,大概有G/3G/T/E/1X/H/H+这些信号标识,这些标志代表什么含义呢?
G:G是GPRS通用分组无线服务技术(General Packet Radio Service)的简称,它是GSM移动电话用户可用的一种移动数据业务,GPRS可说是GSM的延续。GPRS的传输速率可提升至56甚至114Kbps,理论上资费较为便宜。具有高速数据传输速度10倍于GSM、永远在线、仅按数据流量计费的特点;
E:E是EDGE(Enhanced Data Rate for GSM Evolution)增强型数据速率GSM演进技术的简称,是一种从GSM到3G的过渡技术,GPRS到第三代移动通信的过渡性技术方案(GPRS俗称2.5G, EDGE俗称2.75G.)。现在中国移动的EDGE网络已经基本上覆盖全国,只有一些较为偏僻的地区无法访问,其传输速率在峰值可以达到384kbps,现在比较主流的无线网络传输方式;
T或者(H):T是TD-SCDMA(Time Division-Synchronous Code Division Multiple Access时分同步码分多址)的简称,其是中国提出的第三代移动通信标准(简称3G),也是ITU批准的三个3G标准中的一个以我国知识产权为主的、被国际上广泛接受和认可的无线通信国际标准。现在使用的版本是R4版本,理论下载数值为378.2KB/S。
移动卡的用户在信号不稳定时,手机可以在这些信号中自动转换,使你的手机基本通话要求得以保证不间断。
G:这里不用介绍了,和移动的G是一样的,但是由于联通建的基站比较少,所以网络信号质量很差,大家都不愿意用了;
3G(或者H或者3.5G):HSDPA(High Speed Downlink Packet Access)高速下行分组接入,是一种移动通信协议,亦称为3.5G(3½G),它的下载速度理论呢是可以达到7.2Mbp/s。在国内的三大运营商中,联通的3G是做的最好的,很多人用;
H+:HSPA+的英文全称为 High-Speed Packet Access+,增强型高速分组接入技术,是HSPA的强化版本,最高的下行21Mbps,大部分HSPA+手机基本都是支持5.76Mbps的最高上行速度和21Mbps或者28Mbps的最高下行速度,相比较HSPA的速度更快。总的来说HSPA+比HSPA的速度更快,性能更好,技术更先进,同时网络也更稳定,是目前LTE技术运用之前的最快的网络!其属于联通3.75G网络,当前的联通3G网络覆盖较好。显示H+的时候网速是最快的,理论速率可以达到42Mbp/s的,也就是联通目前畅销的WO卡。
1X:1X即CDMA1x,也就是我们通常所说的电信的2G网络,CDMA1X手机上网的传输速率可达每秒钟144Kb,不过在现在的情况下,1X已经满足不了用户的需求了。不过电信2G(也就是1X)对比其它运营商的G属于是最稳定的,也是表现最好的信号;
3G:3G是指3G信号CDMA2000(EVDO.A),EV-DO是3G CDMA的技术名称,在手机上为了简便显示为3G,它的速率理论上达到3M,但实际上一般只有1.6M左右。它是基于移动网络的多址分发同时提供网络流量,这3家运营商的3G网络信号覆盖最好最广的就是电信的3G信号了,他的实测下载速度峰值可以达到290Kb/s左右,电信卡的资费理论上也比较便宜点;
在玩Ingress之后的很长一段时间内,我觉得如果照片没有地理位置信息是一种缺失,而去年买的 Nikon 单反没有GPS模块,Nikon提供的GPS模块需要单独购买价格不便宜并且携带不方便,于是我找到一种既便宜又简洁的方式可以给照片添加上GPS信息。
需要借助的工具:
具体原理是:按照时间顺序,将手机记录的GPS信息写入相机拍摄的照片中。
具体步骤:
之后GPS信息就被写到照片文件中了。
Java 中和正则相关的工具类都在 java.util.regex
包下,Java 使用了 Nondeterministic Finite Automaton (NFA),之所以称为非确定性是因为当正则匹配给定字符串时,每一个字符都可能和正则匹配多次。这个匹配引擎被广泛的使用在 .NET, PHP, perl, Python, Ruby 中。很多人认为正则处理很快,很强大,但是其实不同正则表达式的写法可能导致消耗的时间和空间相差几十倍甚至上百倍,当在一些移动设备中使用正则时则要更加注意。
在引擎内部,NFA 使用回溯(backtracking) ,通常情况下针对给定的字符串,正则表达式可能有不止一种匹配方式,那么规则匹配引擎则会尽可能匹配所有可能,直到失败。
为了更好的理解 NFA 和回溯,举一个简单的例子,比如有一个正则表达式 sc(ored|ared|oring)x
,而输入的文本是 scared
。
在开始的时候,引擎会查找到 sc
,立即找到匹配的前两个字符,接着会从第三个字符开始匹配 ored
,发现不匹配则会尝试下一个可能 ared
,这个匹配成功,继续匹配后面的 x
,此时发现不成功,那么引擎会回溯回去匹配第三个可能 oring
,同样也没有匹配。那么引擎会回溯到第二个字符开始继续匹配 sc
,直到匹配到字符结尾,然后抛出匹配失败。
在上面的例子中就能看到,NFA 使用回溯来进行规则匹配,上面的例子也非常容易发现回溯的一个问题,就是即使是很简单的例子,也可能导致回溯非常多次。由此可以想象,当回溯失控时对应用程序的性能影响。因此优化正则表达式的一个很重要的部分就是尽量减少回溯的次数。
因为回溯的存在,在遇到现实复杂情况时,正则匹配可能需要花费大量时间来寻找完整的匹配。更糟糕的是,引擎花费大量的时间来匹配从而宣告一次失败,这个时间远比一次成功的匹配来得多。因此需要记住的是,当测试正则表达式的速度时,测试正则匹配不成功的时候,而不是测试成功的匹配。而当测试匹配时,则尽量使用刚刚好匹配的字符串,因为这种字符串花费最长的时间。
当程序中需要不止一次使用相同的正则表达式时,预先编译好后使用。先使用 Pattern.compile()
定义好,而不是直接使用 Pattern.matches()
。matches()
方法内部每一次都会重新编译表达式。
并且记住对于不同的输入字符串,我们可以复用 Matcher
对象,不过要记住调用 reset()
方法。
如果不需要引用括号内容,使用非捕获型括号 (?:PATTERN)
,节省捕获时间,减少回溯使用状态数量。只在必要时使用括号捕获。
比如在 [Ff]
应当使用不区分大小写的匹配而不是字符组
正则表达式提供很多结构(字符组,多选结构,量词等等),很多结构功能存在重叠,做同一件事情可能有不同的表达,这个时候应该选择最适当的结构。比如多选结构和字符组,多选结构完全覆盖了字符组。(a|b|c|d)
和 [abcd]
匹配的文本是一样的,但是多选结构用于处理“可能出现若干表达式”,而字符组是专门用于处理“可能出现若干字符”的,这种情况字符组效率要远远高于多选结构。所以应当选择用 [abcd]
.
正则非常灵活,往往同一个表达式可能匹配多种不同形态的文本,但是如果一个表达式中包含若干”能匹配不同形态文本“的子表达式,那么子表达式能匹配的文本有重叠就可能有效率问题。
比如 a+a+
,再比如 [0-9]+\w+
前后连接部分产生重复匹配问题。
两条规则
regex1*regex2*
(量词不限于*) 的表达式,都要尽力避免 regex1 和 regex2 能匹配相同的内容(regex1|regex2)
的表达式,尽力避免 regex1 和 regex2 匹配相同的内容除非是及其罕见的情况,否则以 .* 开头的正则表达式都应该在最前面添加 ^
或者 \A
如果这个正则表达式在某个字符串的开头不能匹配,那么显然在其他位置它也不能匹配。添加锚点无论是手工添加还是通过优化自动添加都能够配合开头字符 / 字符串 / 字串识别优化,节省大量不必要的工作
在表达式前面独立出 ^ 和 \G
^(?:abc|123)
和 (^abc|^123)
在逻辑上是等价的,但是许多正则引擎指挥对第一个表达式使用 开头字符 / 字符串 / 字串识别优化。所以第一种办法的效率高得多
在表达式结尾独立出 $
确定起止锚点能够提高匹配速度,如果使用了 $
标记结尾,正则引擎会从符合条件的长度开始匹配,而略过目标字符串中其他不关心的字符。
用 xx*
替代 x+
能够暴露必须匹配的 x 同样,用-----{0,2}
代替-{5,7}
。
用 th(?:is|at)
替代 (?:this|that)
,就能暴露出必须的 th
。如果不同的多选分支的结尾部分相同,我们也可以从右面”提取”。例如 (?:optim|standard)ization
。
对于传统 NFA,一旦匹配到结果就会停止。
比如对于想要匹配的 a 或 b 或 c 或 d,使用 [a-d]
而不要使用 (?:a|b|c|d)
。字符组比使用分支条件速度快。
谨慎使用点号,星号,加号这样的元字符,只要能确定范围,就不要用点号。只要能够预测重复范围,就不要使用量词。
正则表达式确实很强大,但是不要过分依赖正则。
最常见的错误就是,只要字符串操作就能完成,但非要用正则。比如判定一个字符串以什么开头,或者什么结尾,或者判断是否包含某一个子串。