UPS,Uninterruptible Power Supply,不间断电源。用于给没有电池的台式机、服务器等提供备用电力。当停电时可以提供几分钟的电供关机存盘。 现在 SSD 越来越常用,意外断电最坏情况下可能会全盘数据丢失。一个 UPS 还是有必要的。关于 UPS 的选购此方面网上中文材料甚少。 选购时需要考虑的主要指标有三个 输出,单位是伏安而不是瓦 之所以不用瓦是因为一般此数需要大于实际能负载的电器瓦数。涉及到逆变器的效率、虚功功率,功率因数等问题。厂商推荐将伏安除以1.6来估计最大负载。 大部分UPS在超负载的时候,即使没有当前没有停电也会报警,严重的甚至会拒绝供电。 电池容量 厂商基本都不标。只标多大功率的负载下有多长续航时间。 技术形式 离线式(Standby)在断电后会有5到20毫秒的切换时间。对于一般的电感变压器来说无所谓了,用电端是察觉不到的。此类 UPS 在停电后切换到电池供电是由机械开关完成的。便宜货都是这种,大厂不给这种类型的出高负载的型号 主动在线式(Line Interactive)稍好一点。有多种技术形式,优点是自带稳压,轻度电压不稳时可以修正电压而不需要损耗电池。Standby 则只要电压不稳就要用电池供电。 在线式(On Line)就要贵很多了,不论断不断电,输出都从逆变器走,自带稳压。有多种技术形式。但是一毫秒都不容许掉电的应用场合只能用这种。因为任何时候都从逆变器走,所以也费电。
Category Archives: Knowhow
Zotero 英文界面下中文字体异常的原因和解决办法
本文最后更新于 2020年4月28日 问题概述 当 Zotero 使用英文界面时,中文字体显示可能会出现异常,表现为大小粗细不一。此问题目前网上没有解答,我是第一个给出解答的人。 问题主要出现在英文操作系统下。但在中文系统下,如果用户不愿意使用中文界面而使用英文界面(这可以通过禁用 Zotero 的 intl.locale.matchOS 选项实现),也可能受到此问题的困扰。 问题表现如下图所示,Zotero 默认安装后,显示中文时出现了不同字体混搭,显示效果非常怪异。 经过下文所介绍的设置之后,问题得到解决,效果如下图 原因 操作系统中没有语言 fallback 顺序的设定。于是 zotero 使用软件自己的 fallback 顺序。先尝试英文,英文无法显示再 fallback 到其它语言。因其它语言的 fallback 顺序未设置,故为未定义行为。而默认顺序日文 ja 排序在中文 zh 之前,先落到日文字体上,无法显示的再落到中文字体。这样一行文字当中,有的字(大多为繁体字)使用日文字体显示,有的使用中文字体显示,造成了一行字体不一致。 详细的原因分析见文末讨论部分。 解决办法 2017年7月之后的解决办法 很遗憾的是,由于 Zotero 的更新,原来的较优美的解法(令中文优先于日文)已经不能使用。详见文末讨论部分。 暂时的简便解法是这样的,既然知道问题出在 Zotero 调用日文字体来渲染中文,那么我们把默认日文字体改掉就好了。 进入 Zotero 高级选项:Tools-Preferences-Advanced-Config Editor 搜索 font.default.ja,它的默认值应该是 sans-serif。 因而我们需要改掉日本默认的 sans-serif 字体。继续搜索 font.name-list.sans-serif.ja,然后将一个你喜欢的中文字体放在那一堆日文字体前面即可。我这里用的是微软雅黑。设置会立刻生效。 这种解法的缺点是日文文献可能会有显示问题,但是中文字体的汉字加上日文字体的假名,倒也不算特别不协调。实在在意的话,可以使用 Arial Unicode MS 之类的兼容中日两国所有字符的字体。 …
漫谈那些年用过的词典软件
主体写于2016年,2020年4月依最新情况予以更新和补完。 早年的时候,金山词霸名震全国。我从盗版词霸光盘(还以为是用的正版)开始用起,到大学里有正版的可用,多年以来一直是词霸的忠实拥趸。喜欢词霸的理由很简单:那时候像它这样的软件并不多,支持屏幕取词很是方便,收录的词典权威可靠质量高,也算是为好内容付费。其中专业名词委部分对于后来阅读专业论文还是颇有帮助的。谷歌金山词霸并不怎么好用,后来我电脑里一直有的是某某大学版金山词霸 2009 版。 上大学之后,不少朋友开始用灵格斯。我也在人推荐之下装了,但是除了研究了一下它的功能之外,其实甚少用作主力词典。灵格斯的取词功能相对于旧版的金山词霸是大有进步了,不过也比金山词霸更容易造成 Word 崩溃等问题。那时如果有同学出现 Word 崩溃的问题,先问一句装没装灵格斯总是没错的。(Word 的插件大多不甚稳定,微软没有早点搞 Office 插件商店实在是不明智)划词翻译这个功能是在灵格斯中首先接触到的,当时觉得比屏幕取词更可靠更灵活。除去总让 Word 崩溃外,不太喜欢灵格斯的另一个原因是,虽然我们都同意软件作者应该能从软件中赚钱养家,但灵格斯犯了和 StarDict 的胡正一样的错误:拿着侵犯版权的词库来卖钱,这让人很不舒服。 不过,自我用了 Windows Mobile 之后,早就不把电脑上的词典做主力词典了。有那么两年,Android 还没出现,iPhone 上还没有给力的词典。Windows Mobile 用户手持 MDict 真是可以笑傲天下,藐视一切智能手机用户。MDict 作为 PDA 时代的标志性软件,至今影响很大。虽然 MDict 本身现在已经没有多少用户,但是其词库格式仍然是中国最主流的用户自制词库格式之一,被许多词典软件所支持1。因它的格式设计时对网页兼容甚好,各大词典的原版光盘都可以方便转制成精美程度不输纸版的的词库。这是 StarDict、灵格斯的词库格式所不能做到的。当然,这有赖于当初 MDict 可以调用 Windows Mobile 的 IE 内核来显示内容2。MDict 的悬浮窗和划词搜索也是大杀器(这点至今没有在 Android 和 iOS 上看到同类功能),还有很多文档阅读软件可以支持 MDict 的翻译接口。从这个角度来说,Windows Mobile 当初真的是很先进和方便了。那时我的手机里一堆朗文当代、维基百科、康熙字典等网友制作的词库。最喜欢的当然还是朗文当代,可惜朗文从来没有授权第三方使用他家的词典。从支持正版的角度,我虽然用了盗版的词库,还是买了纸版正版聊作支持。 Windows Mobile 时代终究流水逝去。很多 Windows Mobile 时代的每日必用软件,至今也没有在 Android、Windows …
在美国买床需要搞清的几个名词
本文供初到美国的中国人买床和床垫时参考。 frame 最简单的就是一个八字形框支在地上,中间什么也没有。这种frame是不可以直接放床垫的,必须中间夹一层,否则床垫会塌。而如果frame本身已经是铁网或者上面有木板,那就可以直接放床垫。 foundation 介于frame和床垫之间的东西。有的和 frame 合二为一了,但在美国分开的更常见。独立的一个foundation的话,最简单的就是一排木板或者竹板;更复杂的一般就是box spring,顾名思义就是它是一个硬的弹簧层。 mattress 主流有几种:弹簧的、foam(海绵)、乳胶gel的和复合型的。纯弹簧的mattress最好再加上一层mattress pad,否则睡得不舒服。mattress pad就是放在床垫上的一层东西,以海绵为最常见。但很多复合型床垫已经在弹簧上面放了几层海绵、乳胶等物,那么就可以不加mattress pad。当然对于这种 mattress 也有人加,主要目的是买个防水的东西防止床垫长霉。有的床垫在海绵上面还有一层quilt。这个东西也可以另买。如果觉得床垫本身的纹路直接加床单睡着不舒服的话,可以买一层。 标准的美国床是 frame + foundation + mattress 三层。如果 mattress 比较硬,上面再加一层 mattress pad。 中国人一般觉得没有必要用 foundation 这种东西。要想省钱的话,就有几种方案 买一个有铁丝网或者有木板的 frame (不能买八字形的 frame),直接在上面加个 mattress。这样的优点是床下还可以放东西。 买一个 foundation 直接放地上,上面加个 mattress。Box spring 有点贵,很少有中国学生买这东西;而如果就买一片木板子,那和没买也差不多。所以很少有中国学生用这种方案。 最省钱的当然就是直接把 mattress 放地上,如果不怕潮的话。住在二楼的话也不是不行。
锻炼后肌肉酸痛的原因与规避方法
以下问答基于英文维基的 DOMS (delayed onset muscle soreness) 条目并掺入了我自己的理解: 想锻炼长肉就一定会第二天疼吗? 不是。 DOMS 是肌肉在离心收缩(肌肉收缩时反而被外力强迫延长,肌肉收缩力量不足以抗衡外力)运动时受到的机械损伤所致。当然,离心收缩不代表一定会受伤,但向心收缩几乎不会受伤。 举例来说,俯卧撑在向上撑起时,胸大肌和肱三头肌收缩并缩短;但在向下回落时,胸大肌和肱三头肌收缩但长度被迫延长。向下回落时即是离心收缩,容易在锻炼后产生疼痛。如果向上撑到半截就力竭倒下,不消两三下,第二天包你疼。 所以,选择合适的运动可以完全避免这种疼痛。比如说,像游泳这样的运动不会出现离心收缩。游泳时使一分力,躯体就能移动一点。因而游泳后不容易有 DOMS。静力锻炼后遇到这种疼痛的概率也比较低。而跑步、俯卧撑这些会出现离心收缩的运动,较容易发生疼痛。 如果游泳和静力训练还疼,那有可能是非常缺乏锻炼。与离心收缩不同,向心收缩时如果产生此类伤痛,可能源于一根肌纤维内部不均匀,较强的部分把较弱的部分拉坏了。这对于经常锻炼,肌肉发展较均衡的人来说,是不太可能发生的。离心收缩时后的疼痛很难避免,而避免向心收缩后的疼痛则相对容易。 疼代表会长肉吗? 不是。不疼也可以刺激肌肉生长。 但是这种疼痛是否会长肉更快,我不清楚。 如何减少和避免这种疼痛? 首先可以选择静力训练和游泳。它们不会产生离心收缩。 如果选择了会产生这种疼痛的锻炼,可以循序渐进,逐渐加量。有过体验的朋友都知道,疼痛之后如果休息充分,下次再进行同样的锻炼时就不会产生同样的疼痛。这并不是因为你的肌肉力量已经变强了——它长得没有那么快——而只是你的肌肉有一种应激机制使得下次不会这么疼。但我们可以利用这一点减少疼痛。头两次锻炼的疼痛后,休息几天直到疼痛几乎完全消失(如果在疼痛未消失时继续锻炼,显然第三四次会更疼),以后的锻炼疼痛会大大减轻。 不锻炼到肌肉力量几乎衰竭、动作颤抖的程度,也可以减少损伤和疼痛。 使用合适的科学设计的运动用压力衣物,如压缩裤,弹力袜等可减少肌肉颤抖并减少损伤。 热身和拉伸已被证明对症状没有帮助,相反,过分拉伸会加剧肌纤维的撕裂,使疼痛加剧,更不容易复原。 运动后冲热水澡、蒸柔拿等促进血液流动的活动都有助于恢复。继续锻炼可使疼痛暂时消失,但长远看是否可使症状更快恢复则实验意见不一。 以下内容整理翻译自英文维基的 DOMS (delayed onset muscle soreness) 条目,未按原文顺序,但基本忠于原文。 有过锻炼经历的人都知道锻炼之后两三天肌肉会疼痛。这种被称为 DOMS 的症状通常在锻炼结束后 24 到 72 小时最为显著,一周之后消失。静息时通常不疼,发力或拉伸、压迫时疼痛。注意,它与锻炼后立刻发生的急性疼痛的原因不同。再次锻炼时疼痛加剧,但开始锻炼不长时间后疼痛暂时消失。 DOMS源于肌肉在离心收缩(肌肉收缩时反而被外力强迫延长)运动时受到的损伤。肌肉正常向心收缩(肌肉收缩时长度缩短)运动几乎不会出现 DOMS,即使是静力运动,出现 DOMS 的机率也会大大降低。 一个广泛流传的误解是,这种延后疼痛源于肌肉的乳酸堆积。这种理论早就被抛弃了,因为无论在理论还是实践上它都不能成立。现在广为接受的理论肇始于1902年,由 Theodore Hough 提出。他的基本意见是,这种疼痛是一种肌肉损伤,是在锻炼中发生的肌纤维的细小断裂。之后更多的实验和更多细节被补充到理论当中。比如酶流理论认为在损伤之后发生了肌浆网的钙离子泄露并阻碍了细胞代谢。 乳酸堆积理论漏洞百出:首先乳酸堆积无法解释为何只有离心收缩运动才会集中出现 DOMS;其次乳酸堆积一般 1 小时内就代谢完毕。 重复锻炼效应:肌肉存在一种应激保护机制,使得在初次疼痛之后,肌肉会迅速适应这个强度的锻炼,再次出现的疼痛程度会大大减轻。这种效应不仅能减少肌肉的疼痛,也减少锻炼后肌肉损伤的其它症状,如肿胀、力量减小,甚至没有被锻炼的肌肉也会受到一定程度的保护。这种保护效应的效果不同情况下不一样,但一般可以持续几周时间,一年之后则完全无法检测到。第一次锻炼的强度不需要有以后锻炼强度那么大就可以提供相当的保护效应,比如说,40% 强度的锻炼所提供的保护效应就可以减少 100% 强度锻炼的 …
如何解决Windows下R不能安装package的问题
Update in Feb 2020: 增加了 Windows 10 此外,此问题在新版 R 中不一定还有,因为安装包可能已经修复了这个问题。 在Win10/Win7/Vista下如果使用标准用户来执行R,常常在试图安装package的时候提示无法写入,从而导致安装失败。 原因: R默认安装在C:\Program Files目录,安装的package也存放在C:\Program Files\R\R-2.15.1\library目录下。在Win7/Vista中,C:\Program Files目录是一个受系统保护的目录,Users组只有读取和执行的权限,没有写入权限。为了使旧程序正常运作,Windows会将尝试写入此目录的操作重定向到C:\Users\User\AppData\Local目录下。但是R不支持此重定向(反正它在尝试写入Program Files失败之后,确实问过我要不要把package放到My Documents里,成功写入到My Documents却未成功加载package,后者可能是因为——Win7对注册表也有保护,普通用户下禁止写入HKLM,而重定向到HKCU) 解决方法: 方法一:对于不嫌麻烦的人来说,可以每次启动R的时候都使用管理员权限,这样想干啥就干啥。可以右键R,属性-兼容性选项卡,勾选使用管理员权限运行。 方法二:上述方法有两个讨厌之处:第一,对一个像R这样的普通应用程序赋予管理员权限是不安全的;第二,每次启动R还必须同意授予管理员权限(如果你没有把UAC关掉的话)。第二个方法相对来说一劳永逸:更改library目录的权限。 右键C:\Program Files\R\R-2.15.1\library目录,属性-安全-编辑,对Users组添加“写入”权限,从此就不用担心R无法安装package了。
使python代码兼容不同操作系统的文件路径
原标题:Python下跨平台操作文件路径 众所周知,Windows 下的路径分隔符为反斜杠”\”,而UNIX-like系统下的路径分隔符为正斜杠”/”,这常导致代码跨平台移植时的问题。 python 设计为一门跨平台的语言,当然可以轻松解决此问题。 首先,python 在不同平台下都可以正确识别以正斜杠为分隔符的路径。如果在程序中只用到程序中预置的路径字符串(比如说指定库的位置),而不涉及从系统获取文件路径,则只要将路径写为正斜杠分隔路径,代码即可跨平台。 但是如果需要使用 os.path.abspath() os.walk() 等函数获取路径,python 返回的路径字符串会是操作系统默认格式的路径字符串。这时的解决方法主要有: 在需要拼接、查找路径分隔符的地方,使用os.path.sep来代替显式的’/’或’\’,该变量依平台不同而不同。 当然这样写会比较啰嗦,本来只需要a+’/’+b+’/’+c就可以的地方,现在就需要写成a+os.path.sep+b+os.path.sep+c了。本来直接filename.split(‘/’)就可以,现在就得写成filename.split(os.path.sep)。 所以,对于这些操作,使用os.path的各种内置函数来操作,会简洁一些,同时也增加代码的可阅读性。比如说,前面的a+’/’+b+’/’+c就可以写成os.path.join(a,b,c)。相关操作还有:os.path.split()等
F3507G折腾记
淘宝上搞了一个 Ericsson F3507g,于是我的小黑现在有 WCDMA 和 GPS 支持了 开门见山,对于同样使用 F3507G 正在寻求解决方案的同学,本文可能冗长,包含的最有用的信息均已总结在文章末尾,可以直接跳到倒数第二段。 拿到之后,立刻动手开拆。之前已经打印了一份 X200 Hardware Maintenance Manual 备查。 轻车熟路地拆去键盘、掌托,便露出 mini PCIE 插槽。很久没拆开,已经落满灰。小心吹了吹灰,插上数据卡,拧上螺丝,插上天线。 合上掌托,插 SIM 卡,装电池开机,居然找不到硬件!安装驱动程序,依然找不到。大囧。于是问店家,建议重置 BIOS 试试。虽然在 BIOS 里一点都没找到关于 WWAN 的选项(仅有一个 WLAN 和 WiMaX 的选项),但重置 BIOS 之后再开机,神奇地出现了找到新硬件。 安装 ThinkVantage GPS Enabler,上窗口试了一下,能搜到星。升级 Access Connection,能正常连接联通 WCDMA,信号很好,速度快,便心满心足地睡觉去了。(唯一不好的是流量跑得太快了!!!!) 第二天,开始折腾如何收发短信——真是漫长的历程。 首先查看 Access Connection,竟然没有收发短信的选项。网上网友说,据传说 5.02 版是可以收发短信的,而我的 Access Connection 是 5.95 最新版。总不要为这个把我的 Access Connection …
在Visual C++ 2010中使用getopt
getopt是UNIX和Glibc下的一个十分有用的东西。但是因为并未列入C和C++标准,所以Visual C++并不支持#include\<getopt.h\>。 那么,希望使用嵌有getopt.h的源代码,或者在自己的代码中使用getopt()该怎么办呢? 大致来说,你肯定需要搞到一个可以用的getopt.h和getopt.c。最常见的是GNU的实现,但使用它意味着你需要遵守GPL。所以网上也有一些其它的实现。到底使用哪个则由个人喜好决定。 有了源代码之后,你有两种选择,一是将getopt.h和getopt.c加入你的project中。或者你可以将getopt.h列入你的VC include路径中,编译getopt.c并列入你的VC链接库路径中。 在实际配置你的VC时,有两个问题:1是你会发现Glibc中getopt相关的C文件并不止一个;2是编译GNU getopt.c你似乎还需要一些其它的配置。 于是有一个懒人的选择: http://ieng6.ucsd.edu/~cs12x/vc08install/vc08install2.html 在此链接中,给出了配置Visual C++ 2008的极其详细的步骤。如果你使用VC2008的话,直接下载此页面的getopt9.zip并按说明配置即可。你就可以将getopt的h和lib加入VC。 它提供的getopt.c基于GNU的getopt并包含了GLib中和getopt相关的所有东西。tailor.h可以让你顺利地编译出GNU的getopt实现。所以如果你希望直接在你的project中使用getopt,也可以直接把getopt9.zip中的tailor.h,getopt.h,getopt.c加入你的project即可。 如果你和我一样使用的是VC2010,那么,就不能完全按照此网页的说明来配置了。它提供的编译好的getopt.lib是使用VC2008编译的。而作为一个Win7+Visual Studio2010用户,我的system32文件夹下没有msvcr80.dll,只有msvcr100.dll。所以如果直接使用它提供的lib,你的程序会无法运行。 你需要解压getopt9.zip之后,双击src目录下的vcproj文件,打开VC2010,把getopt.h拷到src目录下,然后在debug和Release模式(重要!)下分别编译这个project。不用担心配置问题,suo文件已经配置好了,直接F7 Build就得到你要的lib文件。 然后按网页说明配置VC。 其中配置include和lib路径一项,VC2010和2008的设置方法不一样。你需要点击:View->Property Manager 在property manager中展开项目名称->Debug|Win32->Microsoft.cpp.win32.user项目,双击,VC++ Directories,然后添加include和library路径。 同理,在Release|Win32->Microsoft.cpp.win32.user中添加路径。 这样添加的include和library路径影响所有project。 如果只欲调整这一个project的路径,菜单Project->properties进行配置。 最后,为了保证你的Linker知道寻找getopt.lib,请按以上方法,进Properties Manager或者Project Properties展开Linker->input->Additional Dependencies,在其中加入getoptd.lib(debug模式下)和getopt.lib(release模式下)。同上,Properties Manager中的Microsoft.cpp.win32.user影响你的所有project,而Project Properties只影响一个Project。你一定不希望你编译的所有程序都链接了getopt.lib,所以,只在要用到的project里链接就够了。
浅论电池选购
于2020年2月修订部分内容 构成电池性能的有很多指标,有些种类的电池在某项指标上很优秀,但是在其它指标上可能会非常糟糕。所以选购电池需要根据实际需要,并不是越贵的电池就越好。 简单列举一下市面常见的电池吧 碱性电池 个体差异非常大,不同品牌的电池几乎可以看作不同的电池,但此处不再按品牌详细列举 碳性电池 镍氢电池 低自放电池 普通镍氢 镍镉电池 可充电锂离子电池 一次性锂锰电池 磷酸锂铁电池 一次性锂铁电池 锌空气电池 用的人非常少的电池,比如南孚聚能镍,松下氢氧电池等就不列入本文讨论范围。 先概述一下各种电池的特点。一次性电池的普遍特点是低自放,可以长时间存储。而充电电池大部分自放电明显。充电电池中,锂电池充电技术简单,而镍氢电池快速充电技术复杂。 碱性电池 优点是容易买,突出缺点是大电流放电下容量急剧衰减。 碳性电池 没啥好的,除了便宜。 镍氢低自放 除了贵之外几乎没有缺点的电池。作为镍氢电池,充电器还是需要一小笔银子。 普通镍氢 突出缺点是自放电率太高了,充电器贵(如果你想充20小时,当然可以买便宜的充电器) 镍镉 突出优点是内阻小,非常适合大电流应用;致命缺点是记忆效应严重。 锂离子可充电电池 非常好的电池,现在无处不在。缺点就是如果没电了不好补充备用的一次电池,另外劣质电池有生命危险。 一次性锂锰电池 常见型号是手表用的CR2032和相机、手机用的CR123A。性能优异,但价格偏贵。 磷酸锂铁 下一代锂充电电池,非常好。 一次性锂铁 下一代一次性电池,如果在淘宝上买的话性价比很高,商店就太贵了。 锌空气电池 助听器电池。容量超大,其它特性极差,不适合几乎其它所有场合 更详细的对比见下表 电池 价格 自放电 放电平台电压稳定性 内阻 高电流放电容量 小电流放电容量 电压 记忆效应 循环寿命 充电技术 过放电后果 过充电后果 保存时间 低温特性 环境污染 碱性电池 …