搭建个人博客系列--(4) 利用Github Actions自动构建博客
经过前面的系列文章的学习和实践,相信你已经成功的利用Hexo构建自己的博客并且部署到了Github上。 目前整个发布博客的流程是,用markdown文件写好博客,然后使用Hexo编译成html, 最后将public下的内容部署到github上。整个过程虽然不复杂,但每次都要重新在本地编译然后上传,多少有些繁琐。 这个时候我们可以寻求一种方法,实现博客自动编译和内容的部署,它就是 Github Actions。 什么是Github Actions?GitHub Actions 是 GitHub 提供的 持续集成与持续部署(CI/CD)平台,允许开发者直接在 GitHub 仓库中自动化构建、测试、打包、发布代码,实现软件开发流程的自动化。通过定义 YAML 格式的配置文件(称为 Workflow),开发者可以定制化代码仓库的自动化工作流程,例如代码提交时自动运行测试、合并分支时自动部署到服务器等。 核心概念Workflow(工作流) 一个 Workflow 是一个自动化流程,由一个或多个 Job 组成,通过 YAML 文件(.github/workflows...
用AI写作--一场自我感动的表演
关于写文章这件事,可能我已经很久没有亲力亲为了。 在这个大家都在用 AI 快速生成各种视频、图文内容的时代,自己一个字一个字的把文章码出来,反倒像是个另类了。 可能是去年某个月份吧,当我第一次尝试用豆包帮我生成一篇文章大纲,然后又让其照着大纲写了一篇文章的时候。我看着那篇全文用词准确、逻辑清晰,尽显专业风格的文章时。那一刻,我脑子里就一种想法–我以前真是傻逼。 我是属于那种码字非常慢那种,作为一个纯正的理工男,我更擅长的是将一件复杂的事用尽量少的语言表述出来,而写作恰恰相反–毕竟一篇文章字数还是要过得去的。 写文章对我来说其实是一种自己为难自己的行为。往往自己花费好几个小时的时候,搜肠刮肚憋出几千个字,再花半个小时排版和找封面,最后发布到公众号,结果阅读量才十几二十的样子。那种挫败感,想必每一个做内容的创作者都感受过。 所以,当我看到那篇用AI写出来的文章之后,我就知道自己out了。 结果也是如我预想的那般,那篇由AI生成的文章,一下子就突破了100多阅读量,在一众只有10,20左右的阅读量文章中显得格外出众。现实用数据告诉我一个道理–刀耕火种地码字,不如拥抱AI。 在那之后,我...
Node安装保姆级教程
方法1:安装包安装 step1: 前往Node官网下载安装包,或者关注公众号“我做开发那些年”,后台回复“Node安装包”获取。 step2 双击安装包,开始安装, 傻瓜式的点击 Next. 点击 next 如果你不想Node默认安装在C盘目录下,可以在这一步修改安装盘 点击 next 点击 Install 方法2:可移动二进制文件安装 step1: 前往Node官网下载安装包,或者关注公众号“我做开发那些年”,后台回复“Node独立文件包”获取。 step2: 将包解压任意目录,如我的是 在D:\software_install\develop下 step3: 将Node目录下的 bin下的配置到window环境变量中a) win+s,搜索 环境变量, 点击编辑系统环境变量 b) 点击环境变量 c) 找到 path, 点击 编辑 d) 点击 浏览 e) 选择 step2 中解压的目录路径 最后点击 确定关闭所有窗口,将环境变量保存应用。 安装验证打开DOS窗口,输入 node -v, 查看是否输出对应的 Node 版本号,如果有,则说明安装成功。如果报...
搭建个人博客系列--(3) Hexo 静态博客搭建实战
通过上一篇文章–动手搭建自己的第一个博客站点的介绍,相信你已经成功搭建起了自己的第一个博客网站。如果你的动手能力比较强的话,或许还给博客页面做了页面美工,添加了导航等功能。 如果你的博客还停留在手写html的阶段,也没有关系,通过这篇文章,让你在10分钟内学会如何使用工具生成漂亮好看的博客页面。 什么是 SSG人类与其他动物的一个显著区别在于,人类擅长制造并使用工具,撰写博客亦是如此。如今,搭建站点撰写博客早已告别了需要手动逐行编写 HTML 代码的 “刀耕火种” 时代,众多优秀工具可供选择,助力我们快速实现更出色的博客呈现效果。 我们知道,一篇博客内容通常都是以HTML的形式存储的,但对于写博客的人来说,其更想要关注的是其内容本身,而不是各种HTML标签的排列组合和样式调整。 那么是否有一种工具,可以让撰写博客的人从书写HTML和各种样式调整中解脱出来,可以直接将纯文本内容转换成带漂亮样式的HTML文件呢? 有的,那就是静态站点生成器(Static Site Generator)。它是一种自动化工具,它通过模板和数据源(如 Markdown 文件、CMS 内容或 API 数据...
搭建个人博客系列--(2) 动手搭建自己的第一个博客站点
在上文什么每个人都该有个数字自留地中讲解了为什么我们要写博客以及为什么要搭建自己的独立博客,今天我们将要撸起袖子,开始干活了。认真看完本文,按照文中的步骤去做,你将拥有一个属于你自己的博客站点。 搭建博客的几种方式说到博客,不熟悉的人对它的印象可能是微博,QQ空间日志,以及如CSDN,博客园之类的站点的样子,功能丰富,用户上手也快,一部手机就能完成所有的事情。 上面所提到的站点,都是标准的商业型应用了,而作为个人,没有必要浪费过多时间在各种花哨功能构建上。 个人博客,最重要的是内容,是价值输出! 目前呢,搭建个人博客的方式主要有以下几种: 社区平台:像博客园,CSDN, 知乎,微博,公众号,QQ空间等,注册一个账号就Okay了。当然了,既然是社区平台,也就意味着没有独立的网站。 独立博客: 有自己的网站,博客框架的搭建,内容的发布,都是由自己完成。对未接触过编程的人来说,上手有一定难度。比较适合有一定编程基础,然后又想挑战一下自己那种的同学。 作为一个明日的大佬,自己动手整个独立博客,想必对大家来说也不是什么难事。 考虑因素既然选择建独立博客,那么我们需要考虑以下几个问题...
搭建个人博客系列--(1) 为什么每个人都该有个数字自留地
从2017年写第一篇博客,到现在已经过去8个年头了。 期间在不同的平台也写过不少的博客,写了又删,删了有些,留下来的其实也没有多少。 这么多年后,为什么我又和许多人一样,重新开辟自己已经荒芜的自留地? 为什么写博客我清晰的记得,我写第一篇博客时的心情,以及那种纯粹的对知识的分享欲。那是一篇在我解决一个困扰我很久的问题之后写下关于虚拟机安装的博客,当时是在知乎上发的。只是让我没想到的是,它至今仍然是我博客中浏览量最高的一篇,有将近30w的浏览量。 纯粹的知识的分享,以及那种来自他人对自己工作的认同感,以及由此产生的成就感,是一促使一个人坚持写博客的主要动力。 写博客锻炼一个人的表达。在写博客的过程中,尤其是刚开始时,刚经常容易提笔忘字,没有想好如何表达。写得久了,表达上也变得变得清晰,变得通畅。 写博客让人思考,了解自我。写作其实是一件蛮费时间和精力的事情,尤其是当自己需要向别人阐述一件事情,让对方尽可能明白自己在说什么。但写着写着,似乎长时间来,这样的坚持也并没有最初那么难受了。并且,当他人没有理解到自己所表达的意思时,也没有想象中那么郁闷,能够接受自己偶尔不被理解的样。 程序...
一篇文章搞懂Array,Set和Map异同
Array,Set和Map三个作为Javascript中可迭代的集合数据类型,在编程过程中使用的频率也比较高。针对三种数据类型各自的一些特性,本文的内容将从以下几个方面来上述数据类型做一个总结。 实例的创建 数据添加 数据访问(查找) 数据的遍历 类似的功能和一些专有方法 三者之间的转换 应用场景 实例的创建 Map和Set创建实例的方式是唯一的,只允许通过new调用构造方法来创建一个实例。值得注意的是,Set和Map在调用构造函数的时候,传参都是数组或者可迭代对象,其中Map的传参数组需要时一个键值对数组。当然,传参也是可选的,非必须。 Array相较于前两者,其创建实例的方式要多写,可通过字面方式创建,也可像Map和Set一样通过构造函数来创建。此外使用Array的静态函数Array.from来创建也是非常常见的。例如,通过docuemnt.getElementsByTagName这类方法获取到一个HTMLCollect这样一个类数组,通常会通过Array.from将其装换成一个真正的数组来进行后续的操作。 1234567891011121314 // 创建map...
Vue依赖收集和触发,看这些关键源码
从Vue开始较大范围在前端应用开始,关于Vue一些基础知识的讨论和面试问题就在开发圈子里基本上就跟前几年的股票和基金一样,楼下摆摊卖酱香饼的阿姨都能说上几句那种。找过前端开发工作或者正在找开发工作的前端都知道,面试官基本上都有那么几个常问的问题,而网上呢也有那么一套可以用来背诵的“八股文”,自己懂多少没有关系,应付面试官还是够的,可以算是屡试不爽吧。 背诵面试八股文无可厚非的,可以说是每一个找工作的人都干过和必须干的事情,因为我们都要工作,都要恰饭。只有恰上饭,才能去谈些伟大的理想。背“八股文”本是一种捷径,尤其是本身对一门技术不是特别了解的开发者,就是那种刚刚能使用它那种。 在众多关于Vue的面试“八股文”中,今天讲的是其中最常问的一个–Vue中的依赖收集。本文也将从代码层面,讲清楚关于依赖收集的几个问题。 收集的依赖是什么?(what) 怎么收集的依赖? (how) 什么时候收集? (when) 至于为什么要收集依赖(why),现在就可以先告诉答案。收集依赖,其核心作用是在数据发生变化的时候可以做出相应的动作,比如刷新视图,为了执行这一动作,我们就得知道是谁在什...
Javascript中两种不同的继承方式对比
Dog.prototype = new Animal() 和 Dog.prototype.proto = Animal.prototype的两种继承方式的区别1. Dog.prototype = new Animal()语法和机制 目的:通过创建 Animal 的实例来继承其原型链。 底层逻辑:将 Dog.prototype 替换为一个新的 Animal 实例。 原型链结构: 1Dog.prototype → Animal 实例 → Animal.prototype → Object.prototype → null 因此,Dog 的实例通过原型链可以访问 Animal 实例的属性和 Animal.prototype 的方法。 特点 调用父类构造函数: 会执行 Animal() 构造函数,初始化父类属性(如 this.name) 继承实例属性:Dog.prototype 会包含 Animal 实例的属性(如 name),即使这些属性是实例级别的。 覆盖原有原型:替换 Dog.prototype 后,原先定义在 Dog.prototy...
关于微信云托管对象存储那点事
最近在鼓捣一个关于图像处理相关的小程序,出于快速开发考虑,在后台开发这块,没有选择走传统的后台部署服务。毕竟,购买云服务器,注册购买域名以及备案等一系列操作下来,也够让人心累。 这次选择的是微信开发的平台的云托管,至于为什么走的不是云函数开发,其中就涉及到了开发语言的选择–python, 如果改用javascript重写一下,成本有点高,所以最终方案选择云托管。 在按照云托管的部署流程一通走下来后,everything is fine. But… 离大谱的,接口请求和响应,居然不能超过1M, 而我这程序就是关于图像处理的,动不动图片大小就会超过1M。如果非要限制用户图片大小限制在1M以下,太过影响用户体验。 此外我还想过,在用户端使用图像压缩,但图像太大压缩也会存在超过1M的情况,另外清晰度也会受到影响。 在微信开发社区和各个IT论坛找了一圈下来,其实没有比较好的解决方案,最终都需要经过一个中间对象存储的过程。 也就是先将图片上传到云上,让后将图片对象的id作为接口入参传入,后台需要使用到图片的时候根据图片id下载即可,然后将处理后的图片,又要上传回云上,返回给客户端新的图片的i...