2019-02-20
0 Comment

Laravel, Element 使用感想

寒假期间,花费了一些时间熟悉了 Laravel, Element 这两个框架,同时顺便看了 vue bootstrap 的相关内容, 并借写了 一个基于 laravel 的 训练计划 项目在此, 但并没有写完就弃坑了。这里记录一些遇到的问题。 Laravel 数据库中时间戳 laravel 的数据库部分有数据库迁移功能,可用于版本升级时,统一升级数据库,详细请看文档。 使用实例 <?php use Illuminate\Support\Facades\Schema; use Illuminate\Da […]

继续阅读 >>
2019-01-25
0 Comment

开发OJ之沙箱 — syscall 限制

计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)【简写syscall】。Linux 提供的系统调用种类十分丰富,不乏一些危险的调用,例如vm86,这是我觉得最危险的系统调用之一,当然也有一些十分普遍的调用,比如read,write。 沙箱需要保护系统的安全,所以需要沙箱能控 […]

继续阅读 >>
2018-12-28
0 Comment

开发OJ之沙箱 — 资源管理

资源限制是沙箱的重要的一部分, 另一部分是系统调用的拦截. 资源限制包括CPU时间, 内存, 写文件大小, 打开文件个数等等。 时间 时间限制 时间限制算是 算法竞赛 中要求最严格的部分了。 看了那么久的Unix环境高级编程, 一想到的就是拿setrlimit来限制;但是 setrlimit 不仅精度不够,而且他计算的时间是是CPU上运行的时间, 一来个sleep就不计入时间,这样很不好。看到老的judge_client是通过死循环不断看着的,我觉得不合适。参考了 QingdaoU/Judger 他们使用一 […]

继续阅读 >>
2018-12-16
0 Comment

开发OJ之沙箱 — 设想和开始

学校现用的 OJ 是HUSTOJ的魔改版, 沙箱自然也是用的它的. 说为沙箱其实并不是很合理, 判题进程包含了构建沙箱这个东西, 他将所有的过程整合在一起, 使得二次开发不是很方便. 所以 专门 立了一个 SandBox 的项目, 新 OJ 将沙箱作为一个单独的项目独立出来, 以方便以后出现 bug 的修复. 我们并不打算考虑多平台, 开发过程中仅在Linux上进行测试, BSD 等 Unix 系统可能需要修改测试, 开发过程中 参考了 QingdaoU judger, EOJ judger, DMOJ j […]

继续阅读 >>
2018-12-09
1 Commnet

新 OJ 技术选型

这篇文章作为 开发 OnlineJudge 啊分类里 的第一篇文章, 将会阐述网站 数据库 Database, 网站后台 Master, 判题 Judger, 运行环境 Server 的技术选型过程. 构架 整个OJ可以分为 关系数据库, 内存数据库, 网站(后期前后端可以再分离), 判题任务队列管理, 判题机, 这五个部分, 每部分都可以部署在同一服务器或这多台服务器上, 必要时可以一个部分部署在多台服务器上 运行流程: 正常情况: 用户提交代码 -> 插入关系数据库 -> 网站通知队列管理 -> 队列管 […]

继续阅读 >>
2018-12-06
0 Comment

Hello, New Online Judge

2018 年也快过完了,很快就 2019 年了;慢慢学习和参考别人的项目/网站一年后,也有了自己心里所想的OnlineJudge系统,这算是挖了个巨坑,重写学校的Online Judge系统,使得其不再依赖于 PHP5 这个即将被抛弃的PHP版本,同时修改一下数据库,和重写沙箱以及判题机(看起来就是重造啊)。 运行环境当然还是依赖于 Debian/Ubuntu ,也许可以考虑使用docker提供统一的运行环境。 很多东西还没选定使用哪种语言/技术进行开发,等思考后决定了,便会新增一篇文章,解释 自己所想的构 […]

继续阅读 >>
2018-11-22
0 Comment

关于 Nginx 的一点坑 — HTTPS回源, add_header

前段时间在网站上部署了 Mathjax, 部署在 st.boxjan.com/MathJax 目录下, 我的 CDN 回源HOST也是这个. 但是, 我直接访问 st.boxjan.com/MathJax 是没有问题的, 一旦使用CDN域名回源访问就出现 博客的错误页, 最先猜想是因为目录问题, 后来发现好像是跟回源相关. 在st.boxjan.com的相关配置文件加入 add_header x-is-origin “true” always; P.S. add_header 也有个坑, 就是他的处理顺序, […]

继续阅读 >>
2018-11-20
0 Comment

使用 acme.sh + nginx 使用 RSA 和 ECC 双证书

ECC证书 相比 RSA证书, 密钥短了很少,但安全性还是有保证,ECC 是Elliptic curve cryptography的简写, 是一种建立公开密钥加密的算法,基于椭圆曲线。由于其密钥较短,运算速度较快,所以渐渐开始在一些网站上使用。但是由于有些老旧 浏览器/系统 不支持ECC证书,为了使他们能够访问,所有我们还得提供一份 RSA证书。 申请 我的网站的证书是使用Let’s Encrypt,所以我使用 acme.sh 这个工具来申请证书。 这个工具强大的地方是能使用各种DNS的API自 […]

继续阅读 >>
2018-10-21
0 Comment

为我的博客增加ipv6

作为一个什么都要支持 IPv6 访问的人, 但是国内的云厂商几乎都不支持IPv6, 就算支持也只是用个虚拟网关把 IPv6的流量转换成IPv4, 再交给服务器, 十分诡异; 腾讯云据说也是这种解决方案, 其他的云厂商则没有去了解.好像国内没有云厂商提供服务器直接支持IPv6的 最先开始的想法是想使用 he.net 的 IPv6 in IPv4 (6in4) 隧道, 这个隧道是基于 GRE 隧道, 但是云厂商们也不支持. 这里也要稍稍吐槽一下 广东电信, 广东电信什么都好, 就是 给公网IPv4, 不给公网I […]

继续阅读 >>
2018-10-20
5 Comments

从 Ubuntu 18.04 升级到 Ubuntu 18.10

Canonical 于 Oct 18, 2018 发布了最新的 Ubuntu 18.10 代号 Cosmic Cuttlefish (宇宙乌贼) 数一下新特性 openssl 升级到了 1.1.1 正式默认支持TLSv1.3 默认使用Gnome 3.30,相比之前版本,提升了一定的性能,主题和图标也更换了 内核使用 4.18.0,gcc 默认使用gcc8.0 我看中的特性大概就这些,详细的内容可以看 Welcome Ubuntu Desktop 18.10 update 最先以为一行 do-release- […]

继续阅读 >>