使用Actions+子模块+ZEIT搭建静态博客

搭建静态博客是很有意思的事情,它可以很简单(半自动Github Page方案),也可以很复杂(自动拉取文章,自动部署)。在之前的文章中,有提到使用Webhook来拉取的方法,但实际实施起来,发现自己更喜欢直接SSH到服务器上来写作。所以这次介绍的方法将不使用自己的服务器,利用ZEIT来部署网页,子模块将不同功能分隔,再使用Github Actions串联起整个操作。

简易KV内存数据库的实现

7月中旬的时候看到了一篇知乎上的关于搭建 pastebin 服务的文章 https://zhuanlan.zhihu.com/p/73961522

作者没有利用redis,而是用rust手撕了一个简易的内存存储,遂引起了我的兴趣,在核心数据结构照着该作者来之外,加入了其他的feature。当然也被 rust 编译器按在地上摩擦了很久。

首选先明确我们的数据库需要实现哪些功能。

  1. 保存数据
  2. 根据key读取数据
  3. 淘汰不常使用的数据
  4. 过期删除
  5. 硬盘二级存储

Hexo+Caddy+Git自动化博客部署

在使用GithubPage+Hexo来部署博客时,我们时常会遇到这样的问题: 网页源代码push上去了,但是大量的markdown文件保留在了本地,这对于多机用户的影响是很大的。

为此你不得不再新建一个branch/repo来存放你的文章,但依然难以避免忘记同步文章的情况发生。

并且多机环境意味着每台机器都要装nodejs环境来进行网页的生成。十分不友好。

所以更好的解决方案呼之欲出:使用webhhook等方式,把生成网页的步骤交给服务器,PC要做的仅仅是写markdown+同步至Git。

准备工作

Gitea+Caddy搭建私有Git服务

花了不少时间把Github的垃圾代码搬迁到了Gitea上,用作自嗨。简单写写遇到的苦难,希望看到这篇文章的各位能少踩些坑

为什么使用Gitea+Caddy?

  • Gitea相比其他Git服务【如gitlab,gogs等】,非常轻量级,适合学生服务器使用。
  • Caddy使用非常简单,快速上手,自动部署HTTPS -> 这个我吹爆
  • 两个都是用Go语言写的,这是一种缘分,也是种巧合

Spirngboot————踩坑与解决

数据库的大作业原本是想用Springboot + PostgreSQL + Redis + Docker 做的,顺便学习一下后端知识。

非常不幸的,踩了不少坑,也很难找到中文的解决办法,最后靠着伟大的StackOverflow 和 国外的热情网友们才解决了问题。

如果你在学习Spring-Boot的路上凑巧遇上了同样的问题,希望这篇文章能对你有所帮助XD

KDE踩坑实录 [3月22日更新]

只有写写踩坑文才能维持生活的样子
环境:Fedora 29, KDE 5.55.0

KDE CONNECT找不到设备

原因

没有打开相关端口

解决方法

  • 防火墙是iptables

    1
    2
    sudo iptables -I INPUT -p tcp --dport 1714:1764 -j ACCEPT
    sudo iptables -I INPUT -p udp --dport 1714:1764 -j ACCEPT
  • 防火墙是firewall

    1
    2
    3
    sudo firewall-cmd --zone=public --add-port=1714-1764/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=1714-1764/udp --permanent
    sudo firewall-cmd --reload

material-ui与TS结合的实践

介绍

material-ui

material-ui是一款React下的组件库,它支持绝大部分Material Design所定义的组件。相比其他的React组件库【比如antd,semantic-ui】,它有如下优势:

  • 样式酷炫, 符合年轻人审美
  • 定制化程度强
  • 支持多种CSS写法,如
    1. JSS
    2. Styled-Components
    3. CSS Modules
    4. LESS
    5. SASS/SCSS
  • 完善的Typescript支持

Typescript

Typescript是由微软开发的JavaScript的超集,同时借鉴了Java与C#的优点。相比JavaScript,它的优势在于:

  • 静态类型检查,减少运行时错误
  • 增强IDE的智能提示
  • 强大的社区支持
  • 空安全机制

Umi

umi,中文可发音为乌米,是一个由阿里开源的 react 应用框架。umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载。然后配以完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求,目前内外部加起来已有 50+ 的插件。它的主要特性在于:

  • 📦 开箱即用,内置 react、react-router 等
  • 🏈 类 next.js 且功能完备的路由约定,同时支持配置的路由方式
  • 🎉 完善的插件体系,覆盖从源码到构建产物的每个生命周期
  • 🚀 高性能,通过插件支持 PWA、以路由为单元的 code splitting 等
  • 💈 支持静态页面导出,适配各种环境,比如中台业务、无线业务、egg、支付宝钱包、云凤蝶等
  • 🚄 开发启动快,支持一键开启 dllhard-source-webpack-plugin
  • 🐠 一键兼容到 IE9,基于 umi-plugin-polyfills
  • 🍁 完善的 TypeScript 支持,包括 d.ts 定义和 umi test
  • 🌴 与 dva 数据流的深入融合,支持 duck directory、model 的自动加载、code splitting 等等

WSL改造实录

换了新显示器后,原来的arch怎么也识别不出来,很蛋疼,加之之前双系统来回切也有些厌烦了。

最终,想起了被遗弃在角落的WSL。决定加以改造,作为日常使用。

WSL安装过程不再赘述。

pyqt踩坑实录

如何创建一个可编辑的QLabel(双击编辑,回车保存)

  1. 建立一个MyLabel类继承QWidget

  2. 布局中添加两个组件label(继承自QLabel) 和 edit(继承自QLineEdit)

  3. [重要] 设置label显示,edit隐藏

  4. 重写 mouseDoubleClick 方法,使label隐藏,edit显示

  5. 为完成编写操作设置回调(槽函数)。当editingFinished信号发出时触发该槽函数

  6. 坑点:组件创建完需立即加入layout中,否则会炸

  7. Sample

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class SingleBuddyLabel(QWidget):
    def __init__(self,text):
    super().__init__()
    self.layout = QHBoxLayout(self)
    self.label = QLabel(text)
    self.edit = QLineEdit()
    self.layout.addWidget(self.label)
    self.layout.addWidget(self.edit)

    self.label.show()
    self.edit.hide()
    def save_edit():
    #TODO:
    self.edit.editingFinished.connect(save_edit)

    def mouseDoubleClickEvent(self,event):
    self.label.hide()
    self.edit.show()
    self.edit.setFocus()

ArchLinux安装攻略的补充

闲来无事尝试安装了ArchLinux+WIn10的双系统,踩过不少坑,在官方wiki大神的博客的帮助下,最终完成了安装.成果图如下.效果图

可以看到我又在那篇博客的基础上做了不少微调.故开贴将这些调整之处记录下来,也算是做一个备忘

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×