Windows挂载WebDAV二三事

首先WebDAV是个挺不错的协议,建立在HTTP之上,也提供了很多很完善功能,同时Windows也提供了原生支持。然而这个支持,槽点太多了。

找不到网络名?

首先第一步,使用文件资源管理器添加网络位置也好,还是在命令行用net use命令挂载也好,都会报一个很神秘的错误:

发生系统错误 67。

找不到网络名。

并不是中文翻译的问题,它英文就是这个意思

乍一看,难道是域名解析的问题,但问题是即使在URL中使用IP地址,也是会报这个错误的。这个时候需要参考官方文档中的troubleshoot(详见这里)。看,这个67错误,虽然叫找不到网络名,但没说为什么找不到网络名嘛,WebDAV客户端服务没开启,这不是也会造成找不到网络名嘛(文档中第3条)

Solution:在服务中打开WebClient服务即可,值得一提的是这个服务默认为手动触发,可能挂载的姿势不对,没能手动触发?

局域网里的WebDAV没开HTTPS不能挂载

是的,默认情况下使用Basic Auth并使用HTTP在公网上传输数据是令人难以想象的。然而,微软恐怕觉得用户会在局域网里使用WebDAV也是appalling的。也是呀,为什么不用SMB呢(灵魂拷问)?当然我们在局域网内用WebDAV通常是因为我们在局域网部署了之后,也会内网穿透到公网提供服务,这可是现代混合云发展理念(哈哈,微软你没想到吧)

Solution:打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,修改键BasicAuthLevel值为2,即同时允许HTTP与HTTPS。

只能听音乐不能看视频?

那是因为通常音乐文件小于50MB,而视频文件普遍大于50MB。要问这个50MB限制是哪来的,上面说的,打开的注册表编辑器不要关,看一下键FileSizeLimitInBytes的值,是不是5后面跟了好几个0?只要把这个值调高一点,就可以了。

Solution: 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,修改键FileSizeLimitInBytes值为适当大小。

BTW: 你可能会注意到这个键是一个32位的DWORD,这意味着最大也就2的32次方字节,或者说是4.29GB(梦回FAT32)。把DWORD改成QWORD企图扩展到64位的尝试,也失败了。因此想看蓝光原盘的,得换个想法了。

Aria2c容器化部署(All in One)

之前做的分成三个部分的aria2c容器化部署(参见这里),WEB服务和Aria2c服务两个镜像还好,压缩后大小都不超过100MB。就是WebDAV服务选用了WsgiDAV,该镜像即使是压缩后,也高达390MB——太可怕了。接下来考虑如何最大限度地减小镜像大小

在Alpine发行版中编译Aira2

alpine可以说是Linux发行版中体积最小的,整个大小只有5MB。虽说体积小对于操作系统而言其实也没什么特别的好处,但当讨论到容器的时候,体积小就具有先天优势。不过有意思的是,alpine使用的标准C语言库和其他的发行版用的不一样,是musl-libc,这就造成没办法直接使用release中发布的二进制文件。
没办法,只能手动编译一个。鉴于alpine软件仓库里的aria2版本也很老了,手动编译其实也是很有必要性的。

Alpine dev软件包的小坑

照着Aria2的说明,只安装libxxx-dev这种软件包,当然在编译阶段是没有什么大问题的,必要的头文件都有;如果Aria2编译使用动态链接库,那也没什么大问题,必要的动态库也有。就是当需要编译一个静态链接的Aria2时,就会出现一串 ···ld: cannot find -lsqlite3 ···ld: cannot find -lintl 之类的报错。正常反应就是:欸?我明明装了sqlite-dev包,怎么还会缺sqlite3.a呢?其实,还有个sqlite-static的包。另外alpine上intl.agettext-static包里,而不在libintl——找这个静态库也是花了好大的力气。此外值得一提的是静态链接得到的aria2c,大小有133.8M。

静态链接还是动态链接

正如上面提到的那样,静态链接得到的aria2c还是稍微有一点点大的。动态链接得到的aria2c为108.1MB,减少了25.7MB。如果说一个容器中没有其他的组件,静态链接当然是更好的选择,但如果还有其他组件,动态链接就更好。然而仔细分析一下依赖情况,alpine软件包仓库中的nginx依赖于

  • busybox
  • libcrypto1.1
  • libssl1.1
  • musl
  • pcre
  • zlib

个个都是个头不超过2MB的家伙,因此从理性上,动态链接得到的总镜像大小应该降低得不是很多。然而一通分析猛如虎,实际上镜像大小从430MB降低到了378MB,减少了52MB,降幅12%。所以还是要动态链接。

从WebDAV协议换成S3协议

文件传输主要还是依赖FTP,SSH,HTTP这三类基本协议。一般来说,如果没有什么特别的需求,没人还会去用FTP协议做文件传输,因为FTP作为一个多端口协议,放在容器里就完蛋了。一般会考虑HTTP基础上的WebDAV,三个主要Web服务器都支持WebDAV协议,其中Apache2和IIS都是完整支持的;Nginx部分支持。如果要在容器当中部署WebDAV,那么首选使用Apache2作为Web服务器,也就省却了安装其他WebDAV服务器的必要。相对于之前装一个WsgiDAV还要完整的Python环境,整个镜像的大小可以有十分显著的减小。
那为什么还要执着于Nginx呢?其实只是单纯个人喜好问题,所以就要想办法解决衍生出来的文件传输的问题。总不能指望一个精简版的WebDAV协议能好用吧。

因此在这回的Aria2部署中选用了S3协议,那么实现了S3协议的MinIO就映入眼帘。当然S3协议并不是WebDAV协议的上位替代。另外对于S3协议而言,最大的缺点在于S3不能部署在子目录下,因为URL是需要签名,然后合并进请求头的,但是一般而言的子目录部署都是需要将前缀删除后,再反向代理给S3服务器。当然使用多个域名倒也是能解决这个问题,只不过有的时候内网部署的时候,通常不会去设置域名——一般是直接IP地址访问。
解决方法主要还是直接反代bucket名,然后反代/minio确保minio的Web UI可用。

实验室常用显色法

碘缸

  • 适用于不饱和或芳香族化合物
  • Recipe
    • 10g 碘
    • 30g 硅胶
    • 在棕色广口瓶中放置上述原料即可

碱性高锰酸钾

  • 主要是利用高锰酸钾的氧化性,氧化后颜色由红变黄,适用于还原性化合物,但寿命较短
  • Recipe
    • 150mg 高锰酸钾
    • 1000mg 碳酸钾
    • 12.5mg 氢氧化钠
    • 20mL 水
    • 将固体混合后用水溶解装瓶即可

磷钼酸

  • 可能对共轭结构显色,属于广谱显色剂
  • Recipe
    • 10g 磷钼酸
    • 100mL 乙醇
    • 混合后装瓶

紫外

通常用于含荧光剂的色谱板,或用于检查物质的紫外激发荧光,目标物质应当有共轭结构

硫酸铈

  • 主要用于检查生物碱
  • Recipe
    • 10g 硫酸铈(IV)
    • 15g 硫酸
    • 200g 水
    • 混合后装瓶

氯化铁

  • 著名的苯酚类显色剂
  • Recipe
    • 1g 氯化铁
    • 50g 乙醇
    • 50g 水

羟基黄酮

  • 广谱显色剂
  • Recipe
    • 0.1g 桑色素
    • 100g 甲醇

茚三酮

  • 经典的氨基酸显色剂
  • Recipe
    • 1.5g 茚三酮
    • 100mL 正丁醇
    • 3mL 乙酸

二硝基苯肼

  • 可检测醛酮类化合物
  • Recipe
    • 12g 二硝基苯肼
    • 60mL 浓硫酸
    • 80mL 水
    • 200mL 乙醇

香草醛

  • 广谱显色剂
  • Recipe
    • 15g 香草醛
    • 250mL 乙醇
    • 2.5mL 硫酸

溴甲酚绿

  • 用于检查pKa<5的羧酸
  • Recipe
    • 0.04g 溴甲酚绿
    • 100mL 乙醇
    • 0.1M 氢氧化钠
    • 规定量的溴甲酚绿和乙醇混合后,滴加规定浓度氢氧化钠溶液至蓝色恰好出现

钼酸铈

  • 广谱显色剂
  • Recipe
    • 12g 钼酸铵
    • 0.5g 钼酸铈铵
    • 15mL 硫酸
    • 235mL 水

茴香醛

  • 广谱显色剂
  • Recipe
    • 3.7mL 茴香醛
    • 1.5mL 乙酸
    • 5mL 硫酸
    • 135mL 乙醇

PyMOL学习日志(二):插件(蛋白质-配体建模)

承接上文介绍可视化与分析增强插件,本文讨论蛋白质-配体建模类插件。

Optimize

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2017/01/14(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:MIT

可以最小化选定部分的能量

tCONCOORD‐GUI

代码仓库位置:不适用
==>项目位置:http://wwwuser.gwdg.de/~dseelig/tconcoord.html
最后一次更新:未知(截止2019/07/18)
目标Python版本:未知
版权声明:未知

404 Not Found

LigAlign

代码仓库位置:不适用
==>项目位置:http://compbio.cs.toronto.edu/ligalign/index.html
最后一次更新:2010/08/24(截止2019/07/18)
目标Python版本:Python2
版权声明:类似MIT

可能那个时代还不流行单元测试吧,需要对下载下来的1.0.0版做一些微调才能用:
1、ligalign/similarityDB/sim_85改名为ligalign/similarityDB/ligSimilarity_0.85.pdbIDlist
2、ligalign/ligand_alignment.py中的1356行,except CmdException块中,无论如何将error变量置为False
这样就能用了。

LigAlign

Kabsch

代码仓库位置:不适用
最后一次更新:未知(截止2019/07/18)
目标Python版本:未知
版权声明:未知

对齐蛋白,推荐使用PyMOL内置的指令fit、cealign或者super。详见https://pymolwiki.org/index.php/Kabsch

PharmDock

代码仓库位置:不适用
==>项目位置:https://people.pharmacy.purdue.edu/~mlill/index.shtml
最后一次更新:2013/07/15(截止2019/07/18)
目标Python版本:Python2
版权声明:未知

仍需要Debug

MLP GLOD

代码仓库位置:不适用
==>项目位置:http://mlptools.altervista.org/
最后一次更新:未知(截止2019/07/18)
目标Python版本:未知
版权声明:未知

404 Not Found

LIQUID

代码仓库位置:不适用
==>项目位置:http://gecco.org.chemie.uni-frankfurt.de/liquid/index.html
最后一次更新:未知(截止2019/07/18)
目标Python版本:未知
版权声明:未知

404 Not Found

DrugOn

代码仓库位置:不适用
==>项目位置:http://bioinfoteam.com/software.html
==>曲线救国:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4304849/#supplemental-informationtitle
最后一次更新:2015/01/13(截止2019/07/18)
目标Python版本:不依赖Python
版权声明:未知

依赖北京大学分子设计实验室开发的LigBuilder。有点想弃之食锅。

POCKETPICKER

代码仓库位置:不适用
==>项目位置:http://gecco.org.chemie.uni-frankfurt.de/pocketpicker/index.html
最后一次更新:未知(截止2019/07/18)
目标Python版本:未知
版权声明:未知

404 Not Found

AutoDock/VINA

代码仓库位置:https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2018/06/27(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:类似CC署名

作为调用AutoDock/VINA的插件,需要外部安装AutoDock/VINA方可使用。

FlexAID

代码仓库位置:不适用
==> 项目位置:http://biophys.umontreal.ca/nrg/resources.html
最后一次更新:未知(截止2019/07/18)
目标Python版本:Python2
版权声明:未知

建议直接替换为同实验室出品的NRGsuite,此外对配体有最多200个原子的限制。

PyMOL & NRGsuite

PyMod

代码仓库位置:不适用
==> 项目位置:http://schubert.bio.uniroma1.it/pymod/index.html
最后一次更新:2017/11/03(截止2019/07/18)
目标Python版本:Python2
版权声明:未知

用于蛋白质序列相似度搜索,多序列-结构对齐,同源建模。——译自项目首页。所以这和蛋白质-配体建模有什么关系┑( ̄Д  ̄)┍

大型XML解析初探(以Drugbank为例)

这些年,大家都喜欢谈论大数据,那我们也来看看所谓大数据下,常规思路是如何走入困境,又应该如何化解矛盾。在这里我们以DrugBank的数据库为例子,讨论一下如何用Python解析大型的XML。

0b0. 上车前系好安全带

一般大家会在发生内存泄漏,填满所有可用内存之前把程序停掉。又或者在申请内存空间时,返回空间不足,从而导致程序意外终止。在内存不足的情况下,Python可不会管你,如果不自己加点保护措施,会直接把系统搞崩。因此,首先要用Python的resource模块上一个内存使用的保险。例如我们将该Python进程最大可使用内存设为3GB,超过3GB将抛出Memory Error异常。

import resource

# Max Memory Used 3GB
MAX_MEM = 5*1024*1024*1024

_ = resource.prlimit(0,resource.RLIMIT_AS,(MAX_MEM,MAX_MEM))

0b1. 开车啦

传统的parse无法正确加载
系好安全带之后会抛出异常而不是计算机崩溃

然后就翻车了
这就是大数据所面临的经典问题

贫穷的你,内存不够大

当然其实内存大了也没用

0b10. 分而治之

针对drugbank数据库,简单分析可以看出,这个数据库是由一个drugbank标签包围的一堆drug标签所构成的。无法在普通计算机中直接读入到内存也只是因为drug标签稍微有一点多——虽然也不是那么地多,毕竟才一万多个。那么一个非常直观的想法就是只解析每个drug标签,而不必把这一万多个drug标签一起解析。这就相当于我们不去直接加载整个数据库,而一条一条数据加载、处理、释放内存。

仔细观察drugbank的xml文件可以看出:其一,以drug单词开头的标签还有不少;其二,文件格式还是不错的,不同标签都正确换行,且不同层次的标签缩进空格也有。那么根据这两个特征,我们可以通过打开文件,逐行分析drug标签的开闭,截取需要的drug标签片段,然后解析。值得注意的是,drug标签里会在drug-interaction标签里再包含一个drug标签,因此如果文件格式不太妙的话,可能还要注意一下premature end of data in tag drug 的问题,需要额外判断一下标签开闭状态。当然drugbank的数据文件还不错,只需要简单地截取就可以了。下面给出一个函数原型,权当抛砖引玉。

from lxml.etree import parse
import tarfile
from io import BytesIO

def drugs(place='drugbank.tar.xz'):
    raw_zip = tarfile.open(name=place)
    XML = raw_zip.extractfile(raw_zip.getmember('full database.xml'))

    buf = None
    enter = False

    for line in XML:
        if line.startswith(b'<drug '):
            buf = BytesIO()
            enter = True
        if enter:
            buf.write(line)
        if line.startswith(b'</drug>'):
            buf.seek(0)
            enter = False
            yield parse(buf)

[WiP]计算NMR化学位移

鄙人什么都不会(指量子化学),主要还是参考其他高人写的文章(参见这边),稍微做一下集成。本文的终极目标是全自动计算NMR化学位移,包括选择基组、自动修正理论/实验误差。

首先量子化学软件输出的NMR计算结果至少会给出三样东西:1、磁屏蔽张量;2、各向异性 (Anisotropy ) 磁屏蔽值;3、各向同性 (Isotropic) 磁屏蔽值。值得注意的是磁屏蔽值的单位是ppm,也就是说将四甲基硅烷(TMS)计算出的磁屏蔽值,减去目标化合物目标原子的磁屏蔽值,就得到了化学位移。年轻的我还照着分析化学书又将差除以TMS的磁屏蔽值,结果怎么都不对。一般来说对于非固态体系,分子的取向并不受限,因此需要取各向同性磁屏蔽值来计算化学位移。

计算形式一般首选GIAO;至于基组的选取,这依赖于理论/实验误差的修正。上边所说文章提到理论计算值与实验值,通常呈线性关系,即对于大量的化合物,将各种化学环境下原子核化学位移的理论计算值与实验值绘制散点图,图中散点可以用直线拟合。该网页提供了基于给定样本计算得到的直线方程与方根均误差(当然也可以看决定系数R2嘛)。依据方根均误差最小选取合适的基组,相近方根均误差则依据计算量最小。上面说的直线方程是根据G03/G09计算理论值从而得到的,其他的量化软件可能需要另外进行拟合。

PyMOL学习日志(二):插件(可视化与分析增强插件)

从2017年的一篇文章所列举的插件列表开始调查(WIREs Comput Mol Sci 2017,e1298. doi: 10.1002/wcms.1298)

BondPack

代码仓库位置:https://github.com/rasbt/BondPack
最后一次更新:2016/08/19(截止2019/07/18)
目标Python版本:Python2
版权声明:GPLv3

BondPack正如其名是一组工具组成的软件包,软件包包含三个工具HydroBond、BondVis和BondLab。其中HydroBond工具可以在用户选定的距离范围内,将所有蛋白与配体潜在的极性相互作用可视化;BondVis则可以根据用户提供的原子对,将这些原子对之间的键可视化;BondLab则进一步提升了BondVis可视化的能力,可以自定义BondVis所生成的键的外观。

尚未进行测试

DynoPlot

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2017/05/04(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:未声明

用于绘制拉氏图,或者直白一点叫做α-碳与酰胺平面交角图。虽然用起来很方便,但是画出来的图,至少从美学上讲,还是有很大进步空间的。

已在PyMOL 2.3.0中测试

Sculpting

代码仓库位置:不适用
最后一次更新:2002/07/18(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:未声明

原文献其实对这个“插件”的描述过于激进,称其为“Real-time energy minimizer”。而这个“插件”不过是2002年开发者在回复PyMOL关于分子塑造[参阅]时,提到的一种PyMOL自身具有的功能。需要指出的是开发者对这项功能只是说“works like a real-time energy minimizer”并且“I’m not sure the sculpting feature is more than entertainment

尚未进行测试

CMPyMOL

代码仓库位置:https://github.com/emptyewer/CMPyMOL
最后一次更新:2017/08/28(截止2019/07/18)
目标Python版本:Python2
版权声明:MIT

比起插件,更像是对PyMOL的一层包装,毕竟作为插件应该是以PyMOL作为框架来实现一些功能,而这个则是另起炉灶,再以远程过程调用PyMOL实现其功能,将PyMOL作为了一种底层平台。CMPyMOL可以用于分析蛋白质的相互作用,生成Contact Map、Heat Map和Histogram。(吃了没文化的亏,不知道这些图该怎么用,感觉在机器学习上会有奇效)

cmpymol demo

已在PyMOL 2.3.0中测试

MOLE

代码仓库位置:不适用
==>项目地址: http://webchem.ncbr.muni.cz/Platform/App/Mole
==>在线版本地址: https://mole.upol.cz/
最后一次更新:2017/04/24(截止2019/07/18)
目标Python版本:Python2
版权声明:通常使用不需付费

自称全平台支持(Win、Linux、MacOS),其实是用.Net写了个Windows下的二进制应用,然后说你可以用Mono装到另外两个平台┑( ̄Д  ̄)┍
可以作为PyMOL的插件,但需要已安装MOLE;不支持PyQt,需要以Tk方式编译得到的PyMOL;因此直接使用MOLE本体可能会更好。

Mole

尚未进行测试

CAVER

代码仓库位置:不适用
==>项目地址: https://www.caver.cz/index.php?sid=199
最后一次更新:(截止2019/07/18)
目标Python版本:Python2
版权声明:通常使用不需付费

似乎是用于计算通道的?安装相对简单,下载得到的压缩包,解压后修改对应操作系统命名的文件夹中的Python代码中的Caver3路径。安装插件时选择从文件安装,文件选取上一步修改代码的Python文件。

已在PyMOL 2.3.0中测试

PyANM

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2017/11/04(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:类似署名-禁止衍生

计算各向异性网络模型,才疏学浅,其意义尚不明确。延伸阅读https://doi.org/10.1016/S0006-3495(01)76033-X

已在PyMOL 2.3.0中测试

BNI Tools

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2019/02/16(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:类似署名-禁止衍生

就是,buff了一下PyMOL的选取和显示的功能。

已在PyMOL 2.3.0中测试

DSSP & Stride Plugin for PyMOL

代码仓库位置:http://www.biotec.tu-dresden.de/~hongboz/dssp_pymol/dssp_pymol.html
最后一次更新:2011/04/28(截止2019/07/18)
目标Python版本:Python2
版权声明:类似署名-禁止衍生

使用外部程序DSSP和Stride计算蛋白质的二级结构,并以二级结构类型上色。说到底是一个把PyMOL和DSSP与Stride粘起来的胶水。

DSSP & Stride Plugin for PyMOL

已在PyMOL 2.3.0中测试

APBS

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2019/02/16(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:类似署名-禁止衍生

PyMOL 2.x自带的一个插件,调用APBS计算蛋白质的电荷分布情况,同时APBS本身需要PDB2PQR将pdb蛋白质文件转换为适合APBS的pqr文件。

已在PyMOL 2.3.0中测试

MLPTool

项目已终止

Azahar

代码仓库位置:https://github.com/BIOS-IMASL/Azahar/
最后一次更新:2018/08/30(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:MIT

用于显示与分析糖链。

Azahar Plugin

已在PyMOL 2.3.0中测试

PyTMs

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2017/11/14(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:GPLv2

诶,能用;但是不懂它是干什么的,说是能修饰蛋白残基,但可能我眼神不好?

已在PyMOL 2.3.0中测试

PLIP

代码仓库位置:https://github.com/ssalentin/plip
==>项目位置:https://projects.biotec.tu-dresden.de/plip-web/plip/index
最后一次更新:2018/05/30(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:GPLv2

可以直接从pip安装,用以表征蛋白质与其他配体之间的非共价作用,与其说是PyMOL的插件,倒不如说它只是用PyMOL来可视化而已。延伸阅读doi: 10.1093/nar/gkv315

Plip

不适用测试

eMovie

代码仓库位置: https://github.com/Pymol-Scripts/Pymol-script-repo/
最后一次更新:2017/06/02(截止2019/07/18)
目标Python版本:Python3/Python2
版权声明:未声明

感动人心的插件,比起用命令行制作动画,不知道高出多少个华莱士。

eMovie

已在PyMOL 2.3.0中测试

ProMOL

代码仓库位置:未知
==>项目位置:http://www.promol.org
最后一次更新:2015/10/05(截止2019/07/18)
目标Python版本:Python2
版权声明:GPLv2

诡异的安装方式,且未尝成功安装。

测试失败

Average3D

代码仓库位置:未知
==>项目位置:http://muralab.org/~cmura/PyMOL
最后一次更新:2005/08 (可能)(截止2019/07/18)
目标Python版本:Python2
版权声明:未知

网站响应时间过长。jpg

测试失败

自建Gitlab在使用LFS出现的一个小问题

现象

在局域网内使用docker启动一个Gitlab实例,其中external_url设置为http://fqdn。外部使用Nginx反向代理到该实例的80端口,并向外提供HTTPS服务。

在使用git LFS上传文件时git提示file already closed

解决

根据GitHub上热心群众提供的方法,需要将external_url中的http改为https,以解决 file already closed 的问题。但是直接改为https则会出现浏览器提示Too Many Redirect,究其原因是容器中的Gitlab实例在发现external_url中的协议名为https时将会自动将80端口上的流量导回443端口上,如下图所示:

循环重定向

为此需要在GitLab的启动环境变量中增加对Gitlab重定向行为的修正,使之不发出重定向响应:

nginx['listen_port'] = 80
nginx['listen_https'] = false

■QED

PyMOL学习日志(一):安装

PyMOL简单来说是一个用于分子可视化的软件包,最初由Warren Lyford DeLano开发,目前由 Schrödinger (是个企业)负责开发与维护。其图形呈现使用OpenGL库,图形化用户界面使用Tk库或Qt库。

在Windows上的安装相对比较简单,所以从Windows平台的安装开始介绍。

Windows平台安装

windows平台上的安装一般选择从预编译的二进制分发包安装。从源码安装原则上应该也是可以的,不过目前还没有成功,姑且挖个坑以后再填

从预编译二进制分发包安装

首先从Christoph Gohlke所维护的Python非官方Windows预编译包网站上下载PyMOL的预编译包
👇下载地址👇
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymol
挑选一个合适的版本下载后使用pip安装即可

:: 假设下载了Pmw‑2.0.1‑py3‑none‑any.whl和pymol‑2.3.0‑cp36‑cp36m‑win_amd64.whl
:: 下载目录为path
:: 那么
cd path
pip install Pmw‑2.0.1‑py3‑none‑any.whl
pip install pymol‑2.3.0‑cp36‑cp36m‑win_amd64.whl
:: 就可以了

从源码安装

施工中
预计完成日期:待定

Linux平台安装

这里以Ubuntu为例,其他发行版的区别应该只有包管理器的那点区别,同法理应可行。

从预编译二进制分发包安装

apt-get install pymol
# 完成了

从源码安装

源代码在GitHub上 https://github.com/schrodinger/pymol-open-source 克隆到本地之后首先检出需要的tag。就本文撰写时,有v2.2.0和v2.3.0两个tag,任选一个即可。就目前而言似乎项目代码还未使用标准的Git工作流来控制代码的开发,仅有一个master分支,因此检出tag就显得很重要了。

1. Prerequisite

  • Python3 (如果需要使用第三方插件,则应当考虑使用Python2)
  • APT包管理器安装如下包:
    • build-essential(用于编译,必须)
    • python-dev( 必须 ;使用Python3,则改为 python3-dev,以下以python-开头的包同理 )
    • python-pmw(如果使用Tk,必须)
    • libglew-dev (必须)
    • freeglut3-dev (如果不使用–glut 安装选项,可选)
    • libpng-dev (必须)
    • libfreetype6-dev (必须)
    • libxml2-dev(如果使用 –no-libxml安装选项,可选 )
    • libmsgpack-dev(用于加速MMTF文件的装载,可选)
    • python-pyqt5.qtopengl(建议,否则将会使用Tk)
    • libglm-dev(必须)

2. 安装MMTF库

PyMOL需要读取MMTF文件,因此需要额外添加编码、解码库,这里需要MMTF的C++实现。其具体实现在GitHub上https://github.com/rcsb/mmtf-cpp 。当然安装该库的前提是安装过MessagePack C++库,也就是上文所说的 libmsgpack-dev 包。
从GitHub克隆后进入目录,根据文档中的安装方法即可

mkdir build
cd build
cmake -G "Unix Makefiles" ..
sudo make install

3. 编译安装

进入克隆下来的PyMOL源代码目录执行

python setup.py install --prefix=~/pymol-build

如果希望用Python3,对应地改为python3即可。编译完成后执行~/pymol-build/bin/pymol即可启动pymol。此外如果希望使用Tk作为GUI库,那么在Ubuntu(至少在18.04上)有一个小bug——Ubuntu安装Tk和Tcl会在Include目录下建立一个Tk文件夹和Tcl文件夹以便多版本共存,那么源代码中写的<#include Tk.h>自然就会引发无法找到头文件的问题,因为理论上应该写作<#include Tk/Tk.h>。那么一种思路就是修改源文件,另一种更加方便的策略就是将Tk和Tcl文件夹加入编译的Include目录列表中。