写一个 Markdown 博客客户端
这个“伪需求”是最近才想到的。
关于文章管理的想法,说来话长。我最初是在 CSDN 写技术文章,就用网页上的编辑器。后来在 CppBlog 写,用上了 Windows Live Write,一般在 Word 里面写好,再贴到 WLW 发布。再后来由于太忙了,一直停到现在。其中除了我懒,有两个客观原因,第一是中间好几年不搞 C++,那么在 CppBlog 上写非 C++ 的东西好像有点奇怪;第二是,服务端的东西真的没法每天下班自己玩呀,每天下班提心吊胆地看短信报警,也没哪个心情和时间再去重新开辟一个和白天工作内容迥异的学习场景维持下去。(佩服自己找借口的能力~)
前些年,Markdown 兴起,GitHub Pages 兴起,一众静态博客工具也蓬勃发展。Markdown 真的太适合用来写技术博客了,唯一不足是图片的处理。尽管如此,我还是花了很大的精力把以前所有的文章都转成了 Markdown。然后曾经一度也玩上了 GitHub Pages,用 Huge 生成静态博客。然而,博客的这东西我认为价值点和动力还是在于交流、碰撞,自己写自己看,跟存本地没啥区别——我的 GitHub Pages 几乎没人看……那时候也没写几篇,大概是 2018 年末到 2019 年初的时间。
半年前,我想到了近年来第一个“伪需求”。我嫌 Hugo 这种形态操作太罗嗦:先写 Markdown,再放到 source repo 的 post 里,提交一把;再生成静态页面,把 public 提交到 public repo。如果折腾模版啥的,就更复杂。我就想写 Markdown,写完提交一次 .md,能不能就看到呢?甚至干脆不提交,直接同步到服务端。这样,就得做一套动态系统(相对于 Hogo 的静态页面)去做这件事,而生成被浏览的数据的逻辑理论上跟 Hugo 之类的没本质区别。而一般个人博客这种文章量,根本不用纳入性能上的考量,因此做成动态是完全可操作的。看了下市面上没有此类的工具,于是就开搞了。我把它叫“NoteIsSite”,GitHub 地址 https://github.com/Streamlet/NoteIsSite,Demo 地址 https://note-is-site.streamlet.org/,然后把我所有的文章也用这个工具挂在主页下的一个子分类,见 https://www.streamlet.org/note/。关于这个,以后再开一篇文章细说。
到这里为止,写的过程代价很小了。但是刚才说了,博客这东西,对于我的动力很大一部分来自于评论、碰撞,还是需要发到公共平台上去的好。最近看到一个去年离职的前同事的博客 https://gclxry.com/,我惊叹于人家一直在坚持写。我想我是不是也要捡起来了,还是回归 CppBlog 吧。于是问题就来了。最近觉得最好用的 Markdown 编辑器是 typora,然后它没法发博客;以前的 WLW 虽然还能用,但毕竟不基于 Markdown。然而 typora 不开源,没法给他加一个“发布”功能了事。所以自己做做看?顺便入一下 Electron 的坑,以及前端的坑。
花了这么大篇幅把需求来源说完了。至于为什么选 Electron 呢?就是为了快点搞定……
上周学习了下 Electron 的 demo 以及打包流程:https://github.com/StreamletStudy/ElectronHelloWorld
然后正式用这个 repo:https://github.com/Streamlet/MarkdownBlog
现在功能就两个:编辑、发布。编辑不是所见即所得的,左边 Markdown,右边 HTML。发布要每次填 API 地址、账号,没做管理。整个流程通了,于是停下来写了这篇文章,用刚写的工具发布上来。
发现了 Electron 的一个坑,只要在页面里调用了 alert,页面上的焦点就有问题,输入框再也无法输入内容了。目前用 remote.dialog.* 替代。不知道有没有正解?
后面的规划:
- 搞清楚前端的语言体系,然后选择用原生 JS 还是它的衍生语言,把工程组织进一步完善
- 搞清楚 UI 复杂度,看要不要选择一个虚拟 DOM 方案
- 撸功能,账号管理等
- 撸功能,做成所见即所得
- 撸功能,支持图片粘贴、上传
再后面,先不规划,做完了再看。当前版本 Release:https://github.com/Streamlet/MarkdownBlog/releases/tag/publish_to_metaweblog_api
写一个 Markdown 博客客户端的更多相关文章
- 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现
1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...
- 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...
- Dropplets – 极简的 Markdown 博客平台
Dropplets 是一个简单的博客平台,专注于提供正是你在博客解决方案中需要的.当涉及到基础的博客功能,你真正想要做的是写和发表,而这就是 Dropplets 的过人之处.Dropplets 是一个 ...
- 我的第一篇Markdown博客
我的第一篇Markdown博客 这是我第一次用Markdown写博客,发现还是比较好用的,加上Marsedit也支持了Markdown的博客预览,博客园也加了Markdown的格式支持,就更加方便了, ...
- 如何搭建一个独立博客——简明Github Pages与Hexo教程
摘要:这是一篇很详尽的独立博客搭建教程,里面介绍了域名注册.DNS设置.github和Hexo设置等过程,这是我写得最长的一篇教程.我想将我搭建独立博客的过程在一篇文章中尽可能详细地写出来,希望能给后 ...
- OpenLiveWriter 这篇文章使用博客客户端撰写
OpenLiveWriter是非常方便的博客客户端,起码相比在浏览器写博客多了一种选择.而且借助于MetaWeblog接口,可以很方便地同步博客文章到多个博客地址.本站cms.xlongwei.com ...
- 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式 ...
- 用 Flask 来写个轻博客 (32) — 使用 Flask-RESTful 来构建 RESTful API 之一
目录 目录 前文列表 扩展阅读 RESTful API REST 原则 无状态原则 面向资源 RESTful API 的优势 REST 约束 前文列表 用 Flask 来写个轻博客 (1) - 创建项 ...
- 用 Flask 来写个轻博客 (24) — 使用 Flask-Login 来保护应用安全
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 用户登录帐号 用户登录状态 Flask-Login 使用 F ...
- 用 Flask 来写个轻博客 (23) — 应用 OAuth 来实现 Facebook 第三方登录
目录 目录 前文列表 扩展阅读 第三方登录流程 OAuth 应用 OAuth 实现 Facebook 第三方登录 实现效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask ...
随机推荐
- Vue3 JS 与 SCSS 变量相互使用
在开发中会遇到如下需求: JS 中使用 SCSS 变量.如在 scss 中定义了一个颜色,el-menu 组件使用该颜色作为背景色,此时需要获取 scss 变量,通过 background-color ...
- hwj是猪
黄伟佳不爱我了吧唧吧唧
- PHP获取两个时间差
<?php //PHP计算两个时间差的方法 $startdate="2017-12-3 12:00:00"; $enddate="2017-12-4 12:00:0 ...
- 第一种方式:使用form表单将前端数据提交到servelt(将前端数据提交到servlet)
第二种使用Ajax的形式将前台的数据传输到后台:https://blog.csdn.net/weixin_43304253/article/details/120335657 1.form表单 引入了 ...
- 题解 UVA10285 最长的滑雪路径 Longest Run on a Snowboard
Solution 双倍经验 就是记搜嘛. 搞一个二维数组记录一下当前的最长滑雪路径,其他和普通 dfs 没什么两样. 向 \(4\) 个方向搜索,如果高度符合就 \(+1\) . 多测要注意数组初始化 ...
- 十四、资源控制器之RS
RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 .即如果有容器异常退出,会自动创建新的 Pod 来替代:而如果异常多出来的容器也 ...
- Windows Server 2019 安装 Oracle 19C RAC(VMWare虚拟机环境)
软件 Windows Server 2019 Standard Oracle 19C Oracle Grid 19 VMware Workstation 16 规划 共享存储,使用Windows Se ...
- KubeEdge架构问题汇总
Q1 :KubeEdge云和边的数据协同有什么优势? A : K8s的原生架构中, Node (Kubelet) 是通过List-watch机制主动与Master通信.List-watch机制有几个 ...
- go如何编写命令行(cli)程序
创建一个命令行程序 问题 如何使用golang创建可以在命令行当中传递参数的程序?go如何带参数执行程序? 比如我们期望使用hello -version来查看hello程序的版本号码.或者输入hell ...
- NET 6 实现滑动验证码(一)、创建工程
目录 实现滑动验证码的目的 创建.NET 6工程 实现滑动验证码的目的 传统验证码实现起来比较简单,但在OCR技术越来越成熟的情况下,验证码的破解难度越来越低,但如果将验证码难度加高(各种干扰背景,扭 ...