2020年12月

http://mscrmtechie.blogspot.com/2015/08/visio-open-group-and-close-group.html

在用Visio画图的时候,使用了一些内置的组合控件,双击编辑内容的时候会自动打开新的窗口(还会自动把组件放大到窗口尺寸)。编辑的时候挺爽,但是编辑完以后,发现无法退出该模式,只能在右下角切换回原本的视图(也就意味着实际上这个窗口并没有关闭)。

自己在Visio里摸了一大圈,只发现了怎么打开这窗口,没发现怎么关。重点是,有时候关闭vsdx文件,之后再重新打开的时候,跳出来的是这个子窗口,而不是正常的全文件视图,每次都要多点几下好麻烦。网上冲浪后得知,有一个非常隐蔽的组合键Ctrl + F4可以关闭当前选中的子窗口。

跟隔壁的优秀大学生(暂定)聊天后才后知后觉地发现,原来げんしん是拿Unity写的。

然而某次启动的时候,不知道怎么把Unity内置的画质设置窗口碰出来了。

后来很好奇这窗口是怎么弄出来的,就去查了一下,没有找到什么快捷键,但是发现了一个参数,可以在启动的时候主动调出那个窗口:

<game>.exe -show-screen-selector

但是在游戏里试了一下,发现并不能生效,应该是游戏启动后有主动加载用户设置的逻辑。

import asyncio, time

async def a(s):
    import time
    await asyncio.sleep(1)
    print(s)

async def b():
    asyncio.ensure_future(a('asd'))
    asyncio.ensure_future(a('qwe'))
    await asyncio.sleep(2)
    print('b')

loop = asyncio.get_event_loop()
B = b()
loop.run_until_complete(B)

要注意的有几个地方:

  1. async def的函数在哪里都可以调用,但是在调用的时候,必须显式等待其结束,否则会出现RuntimeWarning: coroutine 'xxx' was never awaited。在async函数中调用async函数的话,可以使用await关键字直接阻塞等待;在非async函数中则必须设置事件循环器event looper,然后通过事件循环器对所有的异步async函数进行阻塞式等待,避免主线程在子线程完成前退出;
  2. 在协程中休眠线程不能用time.sleep(),而应该用asyncio.sleep(),否则休眠的是整个进程而不是目标协程;
  3. asyncio.ensure_future()比较有意思,提供了类似“用完就扔”的协程运行模式,不必在后续显式await该协程。

在实验室的内网搭了一个GitLab,结果没想到,没有经过任何配置的邮件服务居然是正常运行的。不过发现有一个问题是,由于是内网搭建,服务器显然是没有域名可言的,所以邮件发出去的时候顺便把内网地址也暴露出去了。这两天抽了点时间看一下,发现GitLab官方对这一块没有文档介绍,Email部分的似乎没有提到这个。

之前以为是改/etc/gitlab/gitlab.rb,然后sudo gitlab-ctl reconfigure,后面发现并不行,就一直没管了。

直到某次实验室学弟说我reconfigure又把clone那里显示的域名弄乱了,并给了我一个配置教程之后,才发现似乎是在另一个地方可以完成配置。

要修改的是/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml文件,这是每次reconfigure完GitLab后自动生成的配置文件。修改文件中email_from键值对的内容即可,对应的就是收信时显示的发信人地址;而修改host则可以更改网页中显示git clone时的仓库地址。然后sudo gitlab-ctl restart使得配置生效即可。

顺便提醒,每次reconfigure完之后,gitlab.yml的自定义内容会被重置,需要手动重新配置。

参见 https://www.cnblogs.com/miaocbin/p/13038601.html