我感觉我还是比较适合维护这种 timeline 形式的博客站点

2020-08-08 19:38:49 +08:00
 jwenjian

先给链接

https://timeline.jwj.life/


现在朋友圈基本不发了,微博基本是看新闻,QQ 早就废弃了。

掘金也好久不用了。

想发点自己想说的,各种东西,分享点图片,文章,新闻都找不到合适的地方。

Hexo,语雀,wordpress,typecho 对我来说都太 heavy,有时候想说的就是一两句话,用这些还要先想个标题,再写一句正文就结束了,没什么意义。而且发布比较麻烦,虽然有各种 CI,只需要写 md,然后 push,但是还是不方便(懒)随时输出。

折腾来折腾去,弄了个现在的 timeline 形式的博客,其实不能叫博客,应该叫 list,比较合适。

适合记录一些随时的想法,吐槽,不知道从哪儿摘抄的句子,文章,图片,网址,新闻链接等等,最好在 300 字之内能表述清楚的东西。

而且这也可以减少一些无意义的博客文章输出,本来很多东西都是几句话说明白的知识点,还要水一篇文章,实在是 emmmm....

对于那些长篇的,系统性的博客文章,还是可以在 yuque 等地方写,然后在 timeline 里写一篇摘要,然后链接到原文章去。


这是一个 vue 项目,样式是从 codepen 上找的一个 纯 css 实现的 timeline,响应式,对手机端很友好,我在这个基础上加了一些东西,比如时间,标签,markdown 渲染等。

数据来源是仓库中的一个 json 文件。

这样做的好处是不依赖任何现有的账号体系,只要你最终可以生成一个 json 文件就可以。

所以你的数据从什么地方来,都由你自己控制。

但是你的数据来源必须要有一点,就是 API,这样你才可以把你写的东西取出来,生成一个 json 文件。

另外还有一点比较重要,就是你的输出成本要足够低,低到你可以随时随地发表东西。

这几项里,越多越好,越多, 你就越容易发表你的想法,才可以坚持下去。否则等你打开电脑,打开编辑器,新建一个 md 文档,想个标题,开始写的时候可能就突然不想写了。


目前我的数据是从 https://wenjian.giki.app 平台上来,通过 github 的 action, 每 1 个小时同步一次,调用 giki 提供的 api,生成一个最新的 json 文件,提交到仓库中,同时会触发一次 netlify 的打包部署。

然后再绑一个自己的域名,齐活。

剩下基本不用打理,只管输出就是了。


现在 repo 是私有状态,有人想弄的话,我弄成公开的,然后再写一篇文章(教程)。

6320 次点击
所在节点    程序员
87 条回复
jwenjian
2020-08-09 18:36:10 +08:00
@raaaaaar 确实叫 blog 不太合适,也不是那种很多文章的 blog, 不过想不起来叫啥合适了。
wwwaaa
2020-08-09 19:14:51 +08:00
@Tomotoes #45 哇 为什么你的打开速度在我这儿还挺快的,是有什么黑科技吗?
yannxia
2020-08-09 19:21:40 +08:00
@metrue 试了下 API 报错是 Error: bad_verification_code - The code passed is incorrect or expired.
CallMeReznov
2020-08-09 19:28:36 +08:00
看到 LZ 的图,哇,这 NM 自闭倒了一定境界了吧...
突然又感觉好喜欢的感觉.
转念一想,我 TM 也自闭啊!
learningman
2020-08-09 20:06:05 +08:00
@jwenjian #9 人身攻击 @livid
Shook
2020-08-09 20:43:06 +08:00
你这个就是说说 /朋友圈 /微博。
发说说 /朋友圈 /微博的好处:
1. 功能齐全
2. 节省运营成本

看了你发的东西,我觉得微博比较适合你。
因为微博的搜索功能还是挺完善的,可以删选自己发的内容,也可以筛选 tag 。
Tomotoes
2020-08-09 23:14:42 +08:00
@wwwaaa 所有静态文件 全都放到了 jsDriver, 其余的就是一些基本的页面优化, 我倒是希望必须挂梯子才能访问我的站点.. 访问速度, seo 什么的 无所谓..
ShareManT
2020-08-09 23:38:34 +08:00
https://share-man.com/timeline
这是我的一条四五年的时间线。
screen
2020-08-10 00:02:12 +08:00
这不是把说说,竖过来么
falcon05
2020-08-10 00:20:31 +08:00
这么说来我也有一个,而且也可以写文章

https://hi.cellmean.com/tweets/
batyu
2020-08-10 08:45:29 +08:00
@victor 多少年没见这个词了 毅丝残留
cmdOptionKana
2020-08-10 09:30:06 +08:00
@Shook 微博也有缺点:有数据损失风险,撞关键词的风险,界面无法自定义...
wwwaaa
2020-08-10 10:28:33 +08:00
@Tomotoes #67 我觉得你的主题挺好看,然后照着你的安装文档安装了以后,报错了。能看下是什么原因吗?
```
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.
ERROR {
err: ReferenceError: F:\blog\themes\tomotoes\layout\layout.ejs:6
4| <body>
5| <%- partial('_partial/loading') %>
>> 6| <%- partial('_partial/menu') %>
7| <main id="main">
8| <%- body %>
9| <%- partial('_partial/footer') %>

F:\blog\themes\tomotoes\layout\_partial\menu.ejs:31
29| menuItem = theme.menu[i];
30| %>
>> 31| <li class="waves-block waves-effect<% if(isActive(menuItem)){ %> active<% } %>">
32| <a href="<%- url_for(menuItem.url) %>" <% if(menuItem.target){ %>target="_blank"<% } %> >
33| <i class="icon icon-lg icon-<%= i %>"></i>
34| <span><%=(menuItem.text || _.startCase(i)) %></span><i class="icon icon-lg icon-caret-left"></i>

_ is not defined
at isActive (F:\blog\themes\tomotoes\layout\_partial\menu.ejs:35:88)
at eval (F:\blog\themes\tomotoes\layout\_partial\menu.ejs:43:11)
at menu (F:\blog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiledSync (F:\blog\node_modules\hexo\lib\theme\view.js:132:24)
at _View.renderSync (F:\blog\node_modules\hexo\lib\theme\view.js:59:25)
at Object.partial (F:\blog\node_modules\hexo\lib\plugins\helper\partial.js:34:15)
at eval (F:\blog\themes\tomotoes\layout\layout.ejs:16:17)
at layout (F:\blog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (F:\blog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (F:\blog\node_modules\hexo\lib\theme\view.js:39:17)
at F:\blog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (F:\blog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (F:\blog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (F:\blog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (F:\blog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (F:\blog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (F:\blog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (F:\blog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (F:\blog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (F:\blog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:456:21) {
path: 'F:\\blog\\themes\\tomotoes\\layout\\layout.ejs'
}
} Render HTML failed: index.html
Unhandled rejection ReferenceError: F:\blog\themes\tomotoes\layout\layout.ejs:6
4| <body>
5| <%- partial('_partial/loading') %>
>> 6| <%- partial('_partial/menu') %>
7| <main id="main">
8| <%- body %>
9| <%- partial('_partial/footer') %>

F:\blog\themes\tomotoes\layout\_partial\menu.ejs:31
29| menuItem = theme.menu[i];
30| %>
>> 31| <li class="waves-block waves-effect<% if(isActive(menuItem)){ %> active<% } %>">
32| <a href="<%- url_for(menuItem.url) %>" <% if(menuItem.target){ %>target="_blank"<% } %> >
33| <i class="icon icon-lg icon-<%= i %>"></i>
34| <span><%=(menuItem.text || _.startCase(i)) %></span><i class="icon icon-lg icon-caret-left"></i>

_ is not defined
at isActive (F:\blog\themes\tomotoes\layout\_partial\menu.ejs:35:88)
at eval (F:\blog\themes\tomotoes\layout\_partial\menu.ejs:43:11)
at menu (F:\blog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiledSync (F:\blog\node_modules\hexo\lib\theme\view.js:132:24)
at _View.renderSync (F:\blog\node_modules\hexo\lib\theme\view.js:59:25)
at Object.partial (F:\blog\node_modules\hexo\lib\plugins\helper\partial.js:34:15)
at eval (F:\blog\themes\tomotoes\layout\layout.ejs:16:17)
at layout (F:\blog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (F:\blog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (F:\blog\node_modules\hexo\lib\theme\view.js:39:17)
at F:\blog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (F:\blog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (F:\blog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (F:\blog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (F:\blog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (F:\blog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (F:\blog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (F:\blog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (F:\blog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (F:\blog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:456:21)
```
metrue
2020-08-10 11:28:10 +08:00
@yannxia 就不在这里浪费公共资源了,如果您需要可以直接联系我 h.minghe # gmail.com
jwenjian
2020-08-10 11:58:12 +08:00
@learningman 哈哈 牛
jwenjian
2020-08-10 12:01:47 +08:00
@Shook 确实,也可以理解成自定义微博主页,只可惜微博的 API 太那个啥,还是不折腾它了

而且现在用的是 Giki app 还可以直接同步到微博。
jwenjian
2020-08-10 12:03:07 +08:00
@CallMeReznov 反复性自闭,有时候表达欲特别强调有时候又啥都不想说
learningman
2020-08-10 13:25:49 +08:00
@ShareManT 这真的很 coooool
auto8888
2020-08-10 13:59:56 +08:00
确实 有时候有表达欲,而便签什么的又缺失信息

懒得折腾,所以我把微信朋友设置为全不可看,发朋友圈 solo 自嗨
auto8888
2020-08-10 14:00:51 +08:00
@Tomotoes 老哥 这个太帅了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/696738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX