数据库常用关系代数符号在 LaTeX 中的表示

Relational Algebra / 关系代数符号可以用于表达数据库标准操作逻辑。近期做数据库作业时经常需要用 $\LaTeX$ 表示关系代数的符号,故在这里稍作整理。 Operation 中文 符号 $\LaTeX$ Projection 投影 $\Pi$ \Pi Selection 选择 $\sigma$ \sigma Renaming 重命名 $\rho$ \rho Aggregate Function 聚合函数 $\mathcal{G}$ \mathcal{G} Union 交 $\cap$ \cap Intersection 补 $\cup$ \cup Natural Join 自然连接 $\bowtie$ \bowtie Left Outer Join 左外连接 ⟕ … 这几个直接复制吧 Right Outer Join 右外连接 ⟖ Full Outer Join 全外连接 ⟗ Cartesian product 笛卡尔乘积 $\times$ \times Divide 除 $\div$ \div Assignment 赋值 $\leftarrow$ \leftarrow And 条件并列 $\land$ \land or \vee Negation 非 $\neg$ \neg Exist 存在 $\exists$ \exists For All 对所有 $\forall$ \forall 下标文字 $\sigma_{\text{username}}$ _{\text{}} 粗体文字 $\mathcal{G}_{\textbf{count(*)}}$ \textbf{} 长长长长括号 $\big( \Big( \bigg( \Bigg($ \big( \Big( \bigg( \Bigg( 比较 $\gt \ge \lt \le \ne$ \gt \ge \lt \le \ne 一个栗子🌰:...

April 15, 2020 · Bill Chen

使用 Python 自动登录华东师范大学数据库

近期经常需要写一些和华师大数据库交互的小工具,比如导出课程表,获取绩点等。这里提供使用 Python 登录数据库的方法,将登录信息使用 request 包记录在一个 request.session 中。 这里涉及到四个函数。 main():一个示例的交互逻辑 ECNULogin()主要的登录函数 GetCode()用于获取验证码。这里把手动输入的两行注释掉了,如果不想安装tenserflow,则可以注释掉下面的识别部分,手动输入验证码。不过华师大的验证码很好识别。目前我还没有遇到 pytesseract识别失败的情况。 GetRSA()RSA 加密登录信息。这里调用的是华师大数据库中的 js 文件,并使用execjs来调用内部的 strEnc 函数。 from PIL import Image # 手动输入验证码 import pytesseract # 自动识别验证码 from lxml import etree import sys import requests import getpass import execjs # 用于加密 # 记录登录信息的 session s = requests.session() mainurl = 'https://portal1.ecnu.edu.cn/cas/login?service=http%3A%2F%2Fapplicationnewjw.ecnu.edu.cn%2Feams%2Fhome.action' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36', 'Refer': 'https://portal1....

April 15, 2020 · Bill Chen

解决 macOS 中「可清理」的存储空间

存储空间不足。 检查存储空间时,却会出现一大块显示为「可清理」的空间。这是因为如果开启了 macOS 的 Time Machine,系统会在没有接入外置硬盘的情况下自动做本地快照,占据大量空间。这一块可清理的空间也就是快照占用的磁盘空间,通常会有 3 - 10 GB。 为了清理这一快空间,可以使用以下命令: tmutil deletelocalsnapshots /System/Volumes/Data 清理掉本地快照即可。 这条命令不总是有效,如果当前正在备份或者正在进行关键操作,会提示无法清除。等待片刻即可。你也可以使用 tmutil listlocalsnapshots /System/Volumes/Data 列出所有本地快照,然后使用 tmutil deletelocalsnapshots <快照日期> 删除即可。 另一个解决方案是禁用掉 Time Machine 的本地备份功能。在 Time Machine 的设置中关闭掉自动备份,并临时使用 tmutil disable 禁用,当你需要备份的时候手动点击备份或者使用 tmutil enable 即可。 参考:https://support.apple.com/en-hk/HT204015

March 31, 2020 · Bill Chen

使用小米路由器 R2D 在局域网内配置 ss/ssr/v2ray

因为 2019-nCov 的蔓延,大概率要在家里呆挺长一段时间,所以试着在路由器上安装了一个全局代理,提升互联网体验。把过程整理了一下放在这里了。 我使用的小米路由器为 R2D,也就是 2015 年推出的带有硬盘的小米路由器。不过大多数其他型号的小米路由器同样支持 ssh 权限,流程大体相同。 切换至开发版系统 小米路由器默认的系统版本为稳定版, 不支持开启 ssh 权限。所以需要先升级成开发版的系统。在 http://www1.miwifi.com/miwifi_download.html 可以下载到对应型号的开发版系统: 然后在地址栏输入 http://www.miwifi.com 进入小米路由器的管理后台,在「常用设置」-「系统状态」中选择「手动升级」,选择刚刚下载的开发板系统: **值得一提的是,使用这种方式更新系统可以保留硬盘中的所有数据,不会清空。**更新完系统后路由器会自动重启,重启后可以再次进入管理后台检查路由器的系统状。 开启小米路由器的 ssh 权限 确定系统已经是开发版后进入小米路由器的开放平台 http://d.miwifi.com/rom/ssh 登录小米账号,可以检索到已经绑定了账号的路由器和初始 root 密码。点击下载工具包可以得到开启 ssh 权限的二进制文件 miwifi_ssh.bin。 接着按照官方的引导,将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin;断开小米路由器的电源,将U盘插入USB接口;按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键。 等路由器再次重启之后在局域网内的终端上使用 ssh [email protected] 连接路由器。发现已可连接,使用网页给出的 root 密码登录即可。 配置 ss/ssr/v2ray 接着在路由器上配置 v2ray。我这里使用的是一个集成了许多工具的工具箱(项目地址 https://github.com/monlor/MIXBOX)。在路由器上执行 : sh -c "$(curl -kfsSl https://dev.tencent.com/u/monlor/p/MIXBOX/git/raw/master/install.sh)" && source /etc/profile &> /dev/null 安装成功之后输入mixbox 进入工具箱: 输入 3,在未安装插件列表中选择 shadowsocks。安装成功后回到主菜单,选择已安装插件,选择 shadowsocks(该插件可以配置 ss、ssr、v2ray 三种协议)。这里还有许多其他实用的插件可以安装,可以根据需要使用。 进入插件页面,按照提示依次配置节点即可。注意 vmess:// 格式的链接暂时不支持直接导入。 在启动的时候有四种模式可以选择: 这里的黑名单和白名单似乎和通常情况下所指的代理模式不太一样,不过经过实践一般情况下推荐使用白名单模式,可以让局域网内的所有大陆网址直连,境外网址走代理。 Now enjoy....

February 11, 2020 · Bill Chen

Ballanced —— 一个用 Unity 复刻的 Ballance®️

Ballance 是一款由德国游戏公司 CYPARADE 于 2002 年发行的一款经典的单机游戏。小时候花了很多时间在这上面。刚好这学期的计算机图形学大作业是做一个游戏,于是和小组成员催生了一个复刻 Ballance 的想法。利用 3DS MAX 和 Unity 实现操作逻辑,尽可能接近原游戏的视觉效果和声音效果。连续肝了三个星期,实现了这一想法,并将其命名为 Ballanced。 项目地址 https://github.com/BillChen2K/Ballanced/releases(已编译 Windows 可执行文件) 操作指引 [WSAD] / [方向键]:移动球体 [SPACE]:抬起摄像头 [R] / [K]:重新开始 [P] / [ESC]:暂停游戏 [Q]:退出游戏 以下操作用于调试: [J] 给球一个向上的力使其飞行 [Ctrl] + [Shift] + [W]:一键胜利(…… [Ctrl] + [Shift] + [D]:一键死亡(………… 一些想法 还是比较拙劣的,初学 Unity 的第一学期,很多原理上的东西还没有搞明白,贴图也有些生硬。不过从 0 开始建模写脚本(贴图直接盗用 Ballance 似乎也不算从 0 开始)还是绕了不少坑。目前的初始分数是 1000 分,每秒 2 分递减(维持 Ballance 的逻辑),不过每次掉落平台减掉的不是生命,而是 200 分。 总体说来还是有点可玩性的。 至于一些更加拙劣的粒子效果…… 五毛美工,权当个笑话吧 xd。

January 15, 2020 · Bill Chen