惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
AI
AI
美团技术团队
人人都是产品经理
人人都是产品经理
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
宝玉的分享
宝玉的分享
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
大猫的无限游戏
大猫的无限游戏
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
罗磊的独立博客
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
博客园 - 【当耐特】
K
Kaspersky official blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Google DeepMind News
Google DeepMind News
V
V2EX
博客园 - 聂微东
量子位
云风的 BLOG
云风的 BLOG
C
Check Point Blog
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
The GitHub Blog
The GitHub Blog

MARKSZのBlog

一次由 pnpm 小版本差异引发的 PicGo 2.5.3 发布事故 极空间虚拟机安装 Ubuntu 24.04 踩坑记录 | MARKSZのBlog PicGo 的签名与公证 | MARKSZのBlog 写在 PicGo 即将 8 周年之际 Vite 原理浅析 | MARKSZのBlog Typora 支持 PicGo 来上传图片了 | MARKSZのBlog 用setTimeout和clearTimeout简单实现setInterval与clearInterval | MARKSZのBlog 我的2019春招(暑期实习)记录 | MARKSZのBlog Electron-vue开发实战7——命令行调用与系统级别右键菜单的实现 | MARKSZのBlog Electron-vue开发实战6——开发插件系统之GUI部分 | MARKSZのBlog Electron-vue开发实战5——开发插件系统之CLI部分 | MARKSZのBlog 图床「神器」PicGo v2.0更新,插件系统终于来了 | MARKSZのBlog 一周一部好电影V【WEEK210 网络迷踪】 | MARKSZのBlog PicGo的star数破1000的心路历程 | MARKSZのBlog 小记VSCode插件amVim的改进以及插件开发 | MARKSZのBlog 基于Koa2开发微信二维码扫码支付相关流程 | MARKSZのBlog 【NOTE】观察者模式VS订阅发布模式 | MARKSZのBlog 【NOTE】进程-线程-协程 关系与区别 | MARKSZのBlog 基于Electron-vue的图床上传工具PicGo v1.5更新说明 | MARKSZのBlog
2018小结 | MARKSZのBlog
Molunerfinn · 2019-01-18 · via MARKSZのBlog

终于把研究生开题的事情弄得差不多了,可以抽空写一下2018年的小结了。

今年和去年一样,也是格外忙。不仅实验室活多,还要兼顾研究生的开题等。跟去年一样,列一个今年学习成果清单:

过去的一年

技术成果

  • 2019.01.13(插播) PicGo 发布v2.0版本,正式支持插件系统。star数破3200,下载量破26k。【Electron】

  • 2018.08.28 PicGo star数破2000,下载量破12k。【Electron】

  • 2018.07.19 PicGo-Core 开坑PicGo底层流程系统,将支持插件系统【Node+TypeScript】

  • 2018.07.11 PicGo 更新v1.6版本,支持阿里云OSS,imgur,mini窗口,批量删除等功能。【Electron】

  • 2018.05.23 为VSCode的amVim-for-VSCode插件提交的支持:呼出Command Palette并实现部分Vim命令的PR被合并。【TypeScript】

  • 2018.05.17 PicGo star数破800,下载数破5k。【Electron】

  • 2018.05.15 开发推来推趣3期后台时遇到微信二维码支付相关功能的开发,总结了一篇《基于Koa2开发微信二维码扫码支付相关流程》的经验文。【Koa】

  • 2018.05.09 PicGo 更新v1.5版本,支持腾讯云COSv5、GitHub图床、重命名等新功能。【Electron】

  • 2018.03.28 node-github-profile-summaryvue-koa-demo的Docker话。【Docker】

  • 2018.03.10~2018.05.31 推来推趣3期后台(全栈)迭代。【Vue+Koa+Graphql】

  • 2018.03.06 hexo-theme-melody 更新v1.5版本,支持iframe、支持slides等特性。【hexo+hexo-theme】

  • 2018.01.17~2018.03.28 开坑node-github-profile-summary,可以生成漂亮的GitHub总结报告。【Vue+Koa+Chart.js+Graphql】

  • 2018.01.11~2018.05.08 写了Electron-vue开发实战系列教程,用于记录自己开发PicGo的坑以及帮助新人入门Electron开发。【Electron】

对比去年给自己立的目标:

  • 算法、数据结构 【一部分】
  • Parcel 【没有】
  • TypeScript 【用上了】
  • Puppeteer自动化测试 【没有】
  • PWA 【有新的体验】
  • 给开源库提PR 【完成】
  • github robot 【没有】
  • 如果可以,学习一下react 【碰了皮毛】

感觉完成度不够高,不及去年同期对2016年的目标的实现。主要是没有预料到下半年研究生的开题的战线耗时这么久。从2018年8月开始我就没有发过笔记或者技术文章了,真的非常惭愧。

期望、目标

依然要写下2019年需要学习的东西:

  • 算法、数据结构
  • Flutter入门
  • PWA
  • 学习react
  • Puppeteer使用

感觉把目标缩小点应该完成度会更高。毕竟19年要开始找实习和正式工作+写研究生毕设了。

小结

这一年来的前端的学习之路,收获还是不少的。比起2017年来说,我感觉最大的收获就是阅读源码的能力提高了。虽然不是什么高深的源码,不过相比之前对阅读源码有恐惧心理的自己,还是好了不少。

5月份的时候,那段时间我的Mac上的VSCode的Vim插件变得异常卡,可以参考这个issue。无奈之下只能把官方的Vim插件替换掉,换成了amVim-for-VSCode,当初刚换上的时候,操作如丝般顺滑!不过当时发现它不支持:带来的一系列操作,比如:w保存,:q退出等。于是我萌生了一个想法,能不能把VSCodeVim的操作移植到amVim上?在阅读了VSCodeVim的源码之后,我也模仿了它的实现,把一部分常用的命令移植到了amVim上,并最终成功被作者合并

这次提交PR的过程,我也发了一篇文章作为记录。应该说这次经历过后我对阅读源码的恐惧感减轻了不少,这也为之后的PicGo-Core的开发带来很大的帮助。

8月份之后很长的一段时间里,除了在做研究生开题相关的东西,我基本就是在开发PicGo-Core了。如果你有用过PicGo,那么你应该知道它的1.x版本是不支持插件系统的。而且内置的只有有限的8个图床。(如果你不知道PicGo,欢迎使用,对你的文章写作有很大帮助~)。PicGo里我收到最多的issue,应该就是能否支持XXX图床。如果是一开始写PicGo的时候,我一般会在下一个版本里更新新的图床支持。但是支持到第8个的时候我发现这样无限地支持下去不是一个办法。正巧有个用户提出一个想法:能否将对各种图床的支持,做成插件化的管理,类似 Core + Plugins 这样的模式。

我为此思考了好久,发现这样是可行而且非常合理的。于是我开始找相关的资料——我一开始的想法只是在Electron内部实现一个插件系统。为此我去找了不少例子,比如VSCode、Kap、Atom、Hyper等用Electron写的工具,想看看他们的插件系统是如何实现的。发现他们的实现相对比较复杂。对我来说我是想要实现一个底层的上传流程系统。

后来我想到了Hexo也是有插件系统的,于是就去阅读了Hexo的插件系统如何实现。在看Hexo插件系统实现的同时,我还发现了另外一个工具feflow的插件系统实现。不过我后来发现,feflow的插件体系其实底层大部分是「抄」的hexo的源码的,尤其一个很经典的例子…

20190118101110.png

于是我就把feflow的文章当做hexo插件系统实现的解析文章了哈哈。

在充分理解了hexo插件如何实现了之后,我也开始着手我自己的PicGo-Core了。当然我并没有完全照搬hexo的实现,因为我发现那样的话不利于插件开发者开发插件(主要是语法提示),hexo的插件机制是暴露全局的hexo变量去实现的。

PicGo-Core的流程大概如下:

flow

输入路径或者变量等->经过转换器转换->上传器上传->输出结果。中间包含着三个生命周期钩子。这样的话用户开发插件可以只实现其中的某个部分,也可以实现其中的某几个部分,来实现PicGo原先不能实现的一些功能:

  1. 比如上传非图片文件
  2. 比如上传图片前压缩、加水印
  3. 比如通过已知URL上传图片

等等。

我也正式使用了TypeScript作为PicGo-Core的开发语言,使用起来一开始确实很不习惯,但是后来越用越顺手,学习新东西的过程大概都是这样吧!

在开发PicGo-Core的过程中,我也做了很多除了上面流程系统之外的工作。比如:

  1. 要让用户在命令行和Node里都能使用,我为此基于commander.jsInquirer.jsPicGo-Core加上了命令行支持,同样插件也能支持注册命令等操作。
  2. 为了方便其他开发者开发插件,首先我得写好一个插件模板picgo-template-plugin,并学习了vue-cli2vue-cli3对于模板生成的实现,写了一个下载模板、生成模板的命令init,好让插件开发者能够快速创建插件模板进行插件开发。
  3. 为了让使用者方便下载使用插件,我写了一个PluginHandler用于调用npm命令来下载插件。
  4. 除了写代码,还得写文档,没有文档怎么能有其他开发者为你开发插件呢?所以还花了很大的精力写了PicGo-Core文档,配图、示例一应俱全。

开发完Node版本的PicGo-Core之后,我还要将它和Electron版本的PicGo整合起来,使得Electron版本的PicGo也能拥有插件系统。并且还得通过ipcMain等方式,将主进程的信息通知给渲染进程,从而渲染出插件页面里的插件列表:

为了让插件开发者能够更好地利用GUI版本的优势,我还为GUI版本的PicGo插件加了GUI插件特有的guiApiguiMenu等功能:

这样插件拥有自己的菜单,可以执行自己的操作,那么能做的事就更多了,比如:

  1. 结合GitHub刚刚开放的免费私人仓库,可以通过插件实现PicGo的相册以及配置文件同步。
  2. 结合TinyPng等工具实现上传前给图片瘦身。(不过可能挺影响上传速度的。)
  3. 结合一些Canvas工具,可以在上传图片前给图片加水印。
  4. 通过指定文件夹,将文件夹内部的markdown里的图片地址进行图床迁移。

等等。。

终于,在2019年1月13号,PicGo迎来了2.0版本的更新

回顾这些工作,都是我一个人在半年的时间里通过课余的时间做出来的,其实还是很自豪的。更关键的是,通过开放了插件系统,可以让更多的人参与到PicGo软件的完善中来,通过插件可以实现很多本体不提供或者不足的功能,也是让PicGo更加强大的一个条件。我也希望它日后也能形成自己的一个小生态。

实际上,PicGo-Core以及PicGo2.0发布之后,就已经有第三方开发者开发插件了,速度之快让我始料未及。为此我也迅速加上了Awesome-PicGo的仓库,这样能让更多的开发者的作品让用户看到:

20190118103930.png

你已经可以在VSCode里搜索PicGo,就能发现VSCode版的PicGo扩展了,实现了三种在Markdown里快速上传图片的方式:

  • 通过截图上传

  • 通过文件浏览器上传

  • 通过输入文件路径上传

2019年,我会更新几篇文章,主要讲讲如何实现一个插件系统,如何将Node端实现的插件系统整合到Electron端,如何实现一个模板下载、生成功能,如何实现良好的命令行交互等等。

2019年也是我找实习、找正式工作的一年,希望今年一切都顺利吧!

Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.