1. 方便的个人命令行小助理

    最近发现有一些经常重复性做的工作,包括:

    • 打开命令行查看本机在局域网的 IP
    • 用 Inkscape 命令行转换矢量图格式
    • 调用已写好的某脚本快速查看关注股票的价格

    等等。这些工作往往都有确切的实现办法,但往往用起来相对没那么简便,而且输出也不一定足够精简,比如输出局域网IP功能就只输出一个IP,而且最好命令就是一条非常简单的ip

    想了一下,实现一个这样需求很简单的小工具还是比较容易的,我想的解决方案是这样的:第一步,写一个 Python 脚本,可以接受命令行参数来实现不同的功能;第二步,让这个脚本可以命令行运行。

    需求想明白了,实现就简单了。

    第一步,先编写 tools.py,以输出 IP 为例:

    import sys
    args = sys.argv
    
    def main():
        try:
            if args[1] == 'ip':
                get_ip()
        except:
            pass
    
    def …
    read more
  2. 关闭 Win10 的自动更新(和重启!)

    Win10在默认情况下是打开自动更新的,这本身对多数人来说应该是好事,但有一个非常非常恶心人的设定是同时也会自动重启。重启前甚至还无视其它程序的状态,不管有没有正在修改的文件没有保存,说重启就重启,这是非常糟糕的设计。

    所幸的是在专业版的 Win10 中还可以把这个选项给关闭(据说家庭版是没法修改的,未确认),但不是通过系统带的那个「设置」,而是需要用组策略编辑器来修改,步骤如下:

    1. 按 Win+R 打开运行窗口,输入 gpedit.msc,回车,打开组策略编辑器。
    2. 在左侧栏中依次找到「计算机配置」-「管理模板」-「Windows组件」-「Windows更新」,点击后在右侧双击打开「配置自动更新」,改为「已启用」,左下改为「2-通知下载并通知安装」。

    这样设置后,每次有更新的时候会提示,点击了下载之后才会安装,虽然略微更麻烦一点点,但把那种不知道什么时候会重启的不确定性完全消除了。

    read more
  3. 修正 Inkscape 编辑 matplotlib 导出的文件时内存泄漏的问题

    以前的文章中提到,在 matplotlib 中做标注相比 Origin 来说比较麻烦,但可以输出 SVG 格式,然后用 Inkscape 来做标注,不管是标注文字还是箭头一类,都比较简单。而且 SVG 由于它是一种很标准的通用格式,可以很容易转成 PDF、EMF 或者其它格式。然而最近发现了一个问题,较新版本的 matplotlib 导出的 SVG 在用 Inkscape 编辑时,存在内存泄漏的问题。任何一个几十 kB 的文件,打开后 Inkscape 也会占用几个 G 甚至更大的内存,操作也会变得非常卡顿,十分不正常。

    这个帖子中较为详细地分析了问题的成因,主要原因是 miterlimit 默认被设置成了 100000。恰好由于 Inkscape 渲染 …

    read more
  4. 用 matplotlib 画出规范的论文插图

    我最近所写的论文中基本上放弃了 Origin,而转为用 matplotlib 画几乎所有的插图。相比专业的 Origin,MPL 基本可以替代所有的功能,甚至单论功能还略有胜出。从可定制性角度,两者也接近,但 MPL 没有 Origin 图形化操作的直观性,这方面有所欠缺。而且 MPL 默认的主题和格式都与论文所要求的质量相去甚远,不像 Origin 一样基本默认格式就能凑合用了。

    从我自己的研究领域来看,插图的规范性,主要有几个方面的问题需要设置:

    1. 尺寸,包括图形尺寸、线宽等
    2. 标注,包括对图线的标注、legend等
    3. 图层,叠加不同的坐标轴等
    4. 文字样式、字号等
    5. 输出格式

    一个基本图形的示例

    下面给出了一个示例的代码,通过自定义各种格式基本上可以说符合正式出版的要求:

     1
     2
     3
     4
     5
     6
     7
     8
     9 …
    read more
  5. 检查多维 ndarray 中是否有某元素

    最近又在写科学计算的代码了。今天偶然发现一个 Numpy 中的一个小问题,不注意的话还是很容易踩坑的。

    通常来说,检查一个类似列表的对象中是否有某个元素,最直接的办法是用 in。这个方法对列表、字典、元组等都适用,对一维的 ndarray 对象也适用,例如:

    a = [1, 2, 3]
    print(4 in a)
    b = np.array(a)
    print(4 in b)
    

    结果是False False

    但是,如果这个 ndarray 是二维的数组,结果就非常奇怪了:

    a = [[0,0], [0,1]]
    print([0,2] in a …
    read more

« Page 2 / 9 »

links

social