Manjaro Linux 初体验
前一段阵子心血来潮想折腾下Linux,本来是打算直接从 Arch Linux 开搞的,但是了解了一番之后发现 Arch Linux 貌似对我这样的小白不太友好,于是就选择了基于 Arch Linux 又容易上手的 Manjaro Linux。 没错,这篇博客的编写和部署都是在Manjaro Linux上完成的。先来张我美化之后的效果图: (窗口半透明是因为处于拖动状态下,原本不是半透明的) 在经过了大约3天的体验之后,我决定写一篇博客来谈一谈我的使用感受。至于教程啥的网上都有,应该就不用我多讲了。 外观与美化桌面美化Linux毕竟是开源的产物,不管哪种发行版自定义程度都非常高。我在选择Manjaro的三个GUI(Xfce KDE Gnome)时,因为听说kde的界面最美观,所以就直接选择了KDE。 至于仿MacOS风格,大概也是收到网上教程的影响,觉得MacOS风格确实比较好看。不得不说KDE在界面自定义上真的做的特别全面。刚装好时,感觉下面的任务栏跟Win10的风格没啥区别嘛,而且比win10的要丑很多(当时心里来了句:就这?)后来跟着网上的教程开始配置 Dock...
Telegraf入门使用不完全指北
最近因为某些原因需要做个Telegram的Bot帮我自动管理频道,于是寻思着用Node做一个bot,tg这么大的平台肯定是有Node专属的SDK的,于是在谷歌上找了一下,发现了两个star数量比较多的框架,第一个是 node-telegram-bot-api,第二个就是今天要介绍的 Telegraf。 可是我在谷歌翻了半天也没找到比较易懂的中文的开发教程,官方的文档都是英文的,ytb上的介绍视频大多数也是英文的,虽然也能搜到零零星星的中文介绍,但都是写的含糊不清。在对官方的英文文档研究了一番之后,于是我决定自己写一篇比较浅层的入门介绍。 Bot的工作模式Telegram提供了两种方式使Bot能够接收到最新的消息,第一种是长轮询(Long...
对学校新教务系统的浅显分析
好久没更新博客了,主要是学习太忙了嘛~ 前几天学校换了新的教务系统,虽然仍然是正方软件,但好歹界面比之前的好看多了,根据直觉推断应该是Bootstrap的UI库。而且这次也没有ASP加ViewState那种逻辑了,分析起来容易了一些。 唯一蛋疼的就是,界面的所有元素id,以及接口所有的字段名称全都是用的字母拼音,也不知道哪个人才搞出来的。。 放一张图自己体会: (鬼知道知道我看到这一堆字段名时有多绝望) 登录逻辑登录逻辑相比较之前可谓是复杂了不少,竟然还用到了RSA加密。说实话加密算法这块一直都是我的知识盲区,这次研究过一番后又get到了不少知识点。 登录界面没有验证码,但是当密码输错一定次数之后(三次?)就会出现验证码,不过通过清除cookie就可以绕过,所以应该还是等于没有验证码嘛。 CSRF Token的获取大概查了一下,CSRF(Cross-site request...
从零开始写一个短网址服务
又是新造的一个轮子。 不过这个项目对我来说也是第一个从前端到数据库全部自主实现的全栈项目,所以前后弄了一两个星期。 前端:Vite + Vue.js + MDUI + TailwindCSS 后端:Node.js + Express + mssql 数据库:Microsoft SQL Server 2012 数据库本来打算用MySQL,可是正好微软Azure给了250GB的Azure SQL免费额度,不用白不用。而且MySQL直接部署在服务器上占用的内存是node的几倍了,服务器可能也撑不住。 服务器部分考虑到一个Node进程占用的内存也不可忽视,为了尽最大可能的节省服务器性能开销,我决定把后端直接整合到原先的Revincx API中,实际上这样做给我后续的开发增加了不少难度,两个域名共用一套后端要分开处理确实比较麻烦。 数据库对接部分由于之前只接触过MySQL,对于微软的SQL Server还是比较陌生的。查了一部分资料才大致摸清楚,SQL Server与MySQL比较多了一个模式(Model),差不多相当于在数据库与表之间又套了一层? Node.js 连接...
心血来潮用Vue写了个主页
说实话,这种水平的页面完全没必要用Vue来写,直接写H5再用个jQuery反到更顺手一点。那为啥我非要用Vue呢?正所谓学了就要用嘛,寒假好不容易花大半个月看完的感觉不整个活来用用久而久之就会忘了。 先从背景入手主页的背景图一定要是高质量的壁纸嘛,不仅如此,还要有动画~ 于是我就大概用CSS实现了一个缓慢拉近的动画: 123456789101112131415.bg-scaled { animation: background-scale 30s cubic-bezier(0.14, 0.26, 0.51, 0.96); -webkit-animation: background-scale 30s cubic-bezier(0.14, 0.26, 0.51, 0.96); transform: scale(1.2);}@keyframes background-scale { from { transform: scale(1.0); } to { ...
API站点迁移记录
前情提要:使用Heroku部署Node.js随机壁纸接口 在上次部署之后发现Heroku的效果确实不太理想,tcping延迟普遍300ms以上,后来去看了一下Vercel的云函数开发文档,又改了一个vercel云函数的版本,可是延迟任然很高,速度也比较慢。 既然作为API接口,延迟肯定要低嘛。于是这次我决定把它迁移到服务器上。正好前一段时间又白嫖到了Azure的一百刀Credit,微软的机子宽带好像不是很大,配置也不高,所以就没用它当代理。但香港区的机子延迟很低,大部分情况都是60到70毫秒,有时候甚至可以低到30多毫秒,比我谷歌云的服务器(40多毫秒)还低,正好适合拿来建站。 配置Nginx在上次的文章 一次配置Nginx多站点的折腾记录中,我用的是ngx_stream_module这个模块来对不同的域名进行分流转发。但这次我在安装的Nginx的lib里面没用找到编译后的这个模块,也就是说安装的时候就没用编译(谁让我懒呢直接用yum就安装了)。正当我束手无策时,我在搜索中发现目前的Nginx好像是自带SNI...
服务器常用操作整理
如无特别说明,本文内的操作均是在CentOS 7环境下!本文会不定期更新。 最近更新:MySQL安装及配置、添加Swap分区 服务器玩的多了之后,各种常用的操作越来越多了,每次用都还得上网搜一下很麻烦,于是打算写一篇文章来总结一下。 常用软件安装先介绍一下EPEL源: EPEL源 (Extra Packages for Enterprise Linux) 是由 Fedora Special Interest Group 为企业 Linux 创建、维护和管理的一个高质量附加包集合适用于但不仅限于 Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux (SL), Oracle Linux (OL) 配置 EPEL源: 12sudo yum install -y epel-releasesudo yum -y update Nginx安装及配置安装命令: 1sudo yum install -y nginx 安装成功后,默认的网站目录为:...
抛弃Webpack!Vite使用初体验~
什么是Vite?Vite,官方称其为”下一代前端开发与构建工具”。GitHub地址:https://github.com/vitejs/vite 起因寒假学习Webpack的时候,基本配置就研究了一天。乱七八糟的配置文件一堆,抽离之后虽然好了一点,但还是觉得很乱。尤其是Babel的配置尤为复杂,正可谓:天下苦webpack久矣(其实还是自己太菜 前几天逛某乎的时候偶然发现的新框架,去GitHub一看原来已经出很长时间了,甚至刚发布了2.0版本。作为一个紧跟时事的bug写手,我决定体验一下这款号称极其出色的构建工具 如果里学过Vue,那你一定会知道它的开发者尤雨溪(Evan You),没错,这款工具正是尤雨溪本人编写,所以第一个支持的肯定是Vue,甚至他还表示可能会取代Webpack。 开始创建项目使用Vite创建项目要比webpack简单许多,简单几步搞定,没有特别复杂的配置。 1234npm init vite-app <project-name>cd <project-name>npm installnpm run...
用Node.js写一个二维码生成接口
如你所见,这又是一篇水文 前几天培训的时候老师讲了一个用javaweb中的二维码模块生成二维码,不过只能保存到本地。 正好最近自己在研究Node.js,于是决定使用Node自己实现一个在线生成二维码的接口。 引入模块这里我在GitHub上找到了一个qr-image模块,研究一番之后发现用法不难,于是就决定用它了。 配置路由为了方便说明,这里解释一下我之前的路由配置,下面编辑后的是router/index.js: 1234567891011121314151617const express = require('express')const app = express()const randPicRouter = require('../apis/randPic')const qrCodeRouter = require('../apis/qrcode')var port = process.env.PORT || 8081const server = app.listen(port,() => { ...