我的博客

Windows10开机自动禁止自动更新

目录
  1. 事实证明这个方法不能完全阻止 Win 10 的自动更新
  • 查看服务名称
  • 使用命令设置服务状态
  • 申请管理员权限
  • 解决方案
  • 事实证明这个方法不能完全阻止 Win 10 的自动更新

    今天Windows 10又强行在我离开时重启我的电脑了,而且现在禁用自动更新服务也不管用了。但是好像每次开机手动禁止一下就可以管用不知多长时间(但是你再次开机的时候,自动更新肯定会打开的)。

    于是我希望做一个自动禁用更新服务的脚本,每次开机或者时每次发现自动更新启动的时候执行一下。

    Read More

    在服务器上配置jupyter

    目录
    1. 安装
    2. 配置
      1. 1.创建专用的用户(可选)
      2. 2.创建配置文件
      3. 3.创建密码
      4. 4.生成https使用的证书(可选,如果不用https可跳过)
      5. 5.修改配置文件
      6. 6.启动Jupyter Notebook
      7. 7.防火墙开放端口
      8. 8.如果开启了https,在本地浏览器添加证书信任
    3. 扩展 Jupyter Nbextensions
    4. 使用 nginx 转发 jupyter

    有两种方案:

    1. 直接监听公网 ip 或域名,如需 ssl 和域名绑定,要在 jupyter 中配置证书和私钥
    2. 监听 localhost,再通过 nginx 转发,如需 ssl 和域名绑定,在 nginx 中配置

    安装

    1
    pip install jupyter

    Read More

    Hexo ftpsync错误分析

    目录
    1. 背景
    2. 问题描述
    3. 寻找问题
      1. jsftp
      2. ftpsync
    4. 解决方案(临时)
    5. 快速解决

    背景

    因为一些问题我的博客突然要从wordpress换到hexo。

    用的是百度云的PHP主机,感觉他的ftp本身有些问题,中文路径有乱码,然后有的乱码是可以访问到的,只是在我的WinSCP中显示不正常,可以通过http访问到,hexo的ftpsycn读取到的路径也是正常的,但是有那么几篇文章实在不知道为什么,显示也是乱码,ftpsync读取异常,用WinSCP还删不掉,用百度云的控制台里的删除操作总算删掉了(有一个文件删了多次删不掉,过了一会又自动消失)。再次执行hexo d 命令进行部署,结果committing部分,创建文件夹统统成功,之后就无任何显示了,ctrl + c 终止后,再次执行,发现还是不行,而且Committing后无任何输出,只是卡着不动了。ftp日志又是空的,或许又是百度云的什么bug。

    Read More

    读书与防书

    目录

    终于读完李敖自传,书中李敖的读书方法任我印象深刻,“我是一边看书一边防它,才有今天”(《李敖自传》,人民文学出版社,2018年1月第一版,祖国行断片,420页)。对他感兴趣是从读《北京法源寺》开始的。一本小书,从18年暑假学校开始读,后来秋季开学的时候终于读完了。一直读到后记,这才知道,原来这是李敖在牢里(禁止写作)构思,出狱后写作的小说。感觉他确实是一个极有个性的人。

    书中说这自传是他80岁生日前花40天时间写成的,书中有文字之前似是见过的(从他别的书里),也有一些文字直接标出是引文(多是引得他自己的,如书信或者文章)。文字生动活泼,我喜欢读,而且读的极慢。收获也很多。他在黑暗的台湾,在蒋家政权一手遮天的时代,能够坚持抗争,多么勇敢,历经世态炎凉仍然敢爱敢恨,何等洒脱。

    防书大概是怀疑主义者的态度,我也有同感。我觉得我们应该多读书,多见识,多思考,但是要永远保留自己的态度,而不要去接受书中观念,否则岂不是被书给控制了。

    django外键批量数据查询减少数据库访问

    目录

    在Django使用外键时,可以直接通过含有外键的的model对象访问对应的外键对象的属性。例如:学生选课中:

    StudentCourseRelation对象有两个外键:一个是学生,一个是课程班级。
    student_course是学生选课关系的对象。
    那么可以通过 student_course.student.name ,直接获得student的名称。但是这并不意味着,这部操作不需要额外的数据库查询。

    事实上当你获得一个 StudentCourseRelation对象时
    student_course ,仅有 学生的id和课程的id是已经载入内存的,如果需要通过
    student_course.student或 student_course.course访问student和course的属性的时候都是需要额外的数据库操作的。而且即使是只访问他们的id,如
    student_course.student.id,也同样无法避免额外一次数据库查询。而且每使用一次这个变量都会产生一次数据库查询(没有缓存)。所以这个方法是非常低效的,不适用于大批数据的操作,比如一些统计分析型的任务。

    如果现在需要读取全部的数据,而且这些数据包含外键。我想到的一个更快速的方法是:

    分别读出各个model的全部数据,并以id 为key建立dict。然后依上例,使用
    student_course.student_id 而不是 student_course.student.id 获取外键的id再,通过字典获取相应的数据

    这里有一个实际的测试:

    大概2万8千学生。27万人次选课记录。学生中有1000人左右没有选任何一门课。我们希望找出没选任何课的学生。

    def get_abnormal_student():
        scs = StudentCourse.objects.all()
        students = Student.objects.all()
        stu = {}
        for s in students:
            stu[s.id] = s
        for sc in scs:
            if sc.student.id in stu:
                stu.pop(sc.student.id)
        for s in stu:
            print(s, stu[s].name)
    

    这段代码由于使用了两次sc.student.id,所以运行速度很慢。经过测试,耗时159,769 ms,即159秒 (第二次测试163秒)。
    把第一个sc.student.id改为sc.student_id后,再次测试耗时19,844 ms,即19秒 (第二次测试耗时20秒)。
    把第二个 sc.student.id也改为sc.student_id后 ,仅耗时3371 ms,也就是3秒(第二次测试3秒)。

    def get_abnormal_student2():
        students = Student.objects.all()
        for s in students:
            if StudentCourse.objects.filter(student=s).count() == 0:
                print(s.name)
    

    另一种方法,耗时19秒。
    StudentCourse.objects.filter(student=s).count() 换成s.studentcourse_set.count()耗时17秒

    kms

    目录

    1、搭建KMS服务器

    2、激活

    (1)Windows

    ​ a. 执行命令 slmgr /skms <kms服务器的ip或域名>

    ​ b.执行命令 slmgr /ato

    (2)Office

    1
    2
    3
    4
    5
    6
    cd 'C:\Program Files\Microsoft Office\Office15'
    cscript OSPP.VBS /remhst
    cscript ospp.vbs /setprt:1688
    cscript ospp.vbs /sethst:192.168.1.1
    cscript ospp.vbs /act
    cscript ospp.vbs /dstatus