先给链接
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 是私有状态,有人想弄的话,我弄成公开的,然后再写一篇文章(教程)。
仓库公开了: https://github.com/jwenjian/timeline
写了一个教程,想折腾的可以看看,照着这个 wiki 的步骤试试,应该没有大问题,有问题还请回复或者提 issue 指出
https://github.com/jwenjian/timeline/wiki
另外,这个想法旨在给大家提供一种思路,抛砖引玉,我的页面记录的东西比较杂,你可以用这个做任何你想记录的东西,比如:
等等适合用时间线展示的东西。
1
jwenjian OP 没有评论,没有点赞。也不准备加。就是一个静态站点。
|
2
jwenjian OP 只有一个页面,没有二级页面,没有 about,没有友链,就是一个 timeline 。
|
3
victor 2020-08-08 19:52:49 +08:00 3
挽尊。有个节点叫自言自语,了解一下
|
5
learningman 2020-08-08 21:07:40 +08:00 1
这玩意儿我们一般叫朋友圈或者 QQ 空间
|
6
masker 2020-08-08 21:13:51 +08:00 via Android 23
没人关心你的生活,谢谢。
|
7
DandelionFlowers 2020-08-08 21:41:44 +08:00
现在自己随身带个可以塞进裤兜小本, 习惯年末再做总结
|
8
DandelionFlowers 2020-08-08 21:44:49 +08:00
@DandelionFlowers 如果平时的话可能耽误正事(但确实很新颖)
|
11
tangkaichuan 2020-08-08 23:11:47 +08:00 via Android 7
好的博客是调研、构思、润色的产物,对于自身和他人有一定价值。个人倾向于沉淀下来记录一些有用的文字而不是不痛不痒的口水话。
|
12
hellolex 2020-08-08 23:28:32 +08:00 1
这个不就是微博?
|
13
kuanng 2020-08-08 23:29:55 +08:00 1
能理解楼主的做法
但是还是想吐槽一下,这不就是微博吗? |
14
ruyu 2020-08-08 23:42:45 +08:00
正经人谁写日记啊 😂
|
15
FakerLeung 2020-08-08 23:55:55 +08:00
不懂为啥 9 楼就直接开喷了。
|
16
eminemcola 2020-08-09 00:02:58 +08:00
像是一个微博单机版
|
17
yujiang 2020-08-09 00:09:16 +08:00 via Android
微博单机版?手机上装个好用的第三方客户端关掉热门,发送默认成仅自己可见不就行了
|
18
rpish 2020-08-09 00:23:24 +08:00 1
😂只有我觉得很棒吗?
很好看啊 非常适合记录一些国际大事 /生活琐事 |
19
hertzry 2020-08-09 00:25:08 +08:00 via Android
有意思,是托管在 GitHub 上吗?楼主快公开,想搞一搞🤔
|
20
cmdOptionKana 2020-08-09 01:03:57 +08:00 via Android
很不错,心理负担小,记录更轻松。
|
21
metrue 2020-08-09 01:42:43 +08:00 via iPhone 1
我是文中提到的 Giki https://giki.app 的作者,喜欢的朋友欢迎尝试.
|
22
agagega 2020-08-09 02:01:39 +08:00 via iPhone
博客不一定就要是长文。很多国外的优秀博客我也订阅了,内容也有很多不长。平时有些想法比小几百字的微博长,但也没长到一篇文章的程度,做博客其实合适
|
23
jwenjian OP @FakerLeung 哈哈 去它的主页看它的回复就懂了
|
24
jwenjian OP @tangkaichuan timeline 只是一个形式,内容是自己决定,可以是口水话,也可以自己沉淀下来的东西,或者单纯做一个书摘,网络书签等等,都可以。
|
25
jwenjian OP |
28
jwenjian OP |
29
jwenjian OP @DandelionFlowers 这种也很好,正好现在手机使用率太高,写字都很少写了,可以练练写字。。。
|
30
cokar 2020-08-09 08:53:23 +08:00
没有互动很难坚持下去的,如果只是自己发自己看,也毫无意义
|
31
yannxia 2020-08-09 09:02:55 +08:00
@metrue sign user failed: 500 - Internal Server Error 微博和 GIthub 都不行咧
|
32
imnaive 2020-08-09 09:34:30 +08:00
我觉得可以把想法和博客文章分成两个 tab 页。
有想法就像川老师一样直接发出来, 写文章时就认真写文章。 |
33
lx91714 2020-08-09 10:03:01 +08:00 via Android
样式可以分享吗
|
34
royrs 2020-08-09 10:06:07 +08:00
|
35
asanelder 2020-08-09 10:17:05 +08:00
支持楼主。
其实这种东西还是有需求的,之所有没有类似的产品,可能是因为没有什么商业价值。 俺觉得微博早期,可能比较满足,但商业化后就变味了。 |
36
laike9m 2020-08-09 10:32:48 +08:00 via Android
除开想自己管理数据这个理由,其实 Twitter 就能够满足要求了
|
37
masker 2020-08-09 11:25:54 +08:00 via Android
@FakerLeung 毕竟玻璃心
|
38
KasuganoSoras 2020-08-09 11:41:31 +08:00
早期做过类似项目,不过是 PHP 写的
https://github.com/kasuganosoras/Pigeon |
41
jwenjian OP @royrs 这个我之前就看到了,就是借鉴这种思路做的这个,不过他是通过快捷指令或者 utools 之类的工具写东西,我是找了一个顺手的平台。各有利弊吧。
另外数据的话,现在的方案是每隔一段时间就全量备份到 github 的仓库 json 文件中,也算是在自己手里吧。 |
44
jwenjian OP @KasuganoSoras 我这里没打开 tql.ink , 不过看 repo 的介绍,应该是类似的东西,而且比这个更丰富。
|
45
Tomotoes 2020-08-09 14:36:24 +08:00
|
47
jwenjian OP 想折腾的可以看第一条附言。
|
48
ochatokori 2020-08-09 14:58:45 +08:00 via Android
我的博客也是这种形式,一条只有三言两语,没评论和点赞,和朋友圈和微博还是很有区别的。
就是,有些事想说出来满足一下表现欲,又不想别人来干涉的感觉哈哈 |
49
dartabe 2020-08-09 15:18:35 +08:00
支持楼主 挺好看的
|
51
mathzhaoliang 2020-08-09 15:51:20 +08:00
v2 博客帖千千万万,点进去没一个能看的。全是小白文。
|
52
wusheng0 2020-08-09 16:47:18 +08:00 via Android 1
看到楼上忽然开喷那个,说句题外话,
每次没登录,看到有些人的发言,想 block, 结果登录之后发现已经 block 了; 看来还是本性难移。 |
53
maemual 2020-08-09 16:49:41 +08:00
要不开个 Telegram 的 channel?
|
54
raaaaaar 2020-08-09 17:14:37 +08:00 via Android
换个平台吧,blog 的话,一般是文章多,你这种算个人日记啥的吧。
|
55
arccoso 2020-08-09 17:26:27 +08:00
知乎,随便写
|
56
metrue 2020-08-09 17:55:54 +08:00
@yannxia https://giki.app 的登陆 API 目前显示工作正常,我尝试用 GitHub 和 Weibo 登陆都没有问题,您可以在试试,如果需要帮助,也可以直接联系我.
|
63
yannxia 2020-08-09 19:21:40 +08:00
@metrue 试了下 API 报错是 Error: bad_verification_code - The code passed is incorrect or expired.
|
64
CallMeReznov 2020-08-09 19:28:36 +08:00
看到 LZ 的图,哇,这 NM 自闭倒了一定境界了吧...
突然又感觉好喜欢的感觉. 转念一想,我 TM 也自闭啊! |
65
learningman 2020-08-09 20:06:05 +08:00 2
|
66
Shook 2020-08-09 20:43:06 +08:00
你这个就是说说 /朋友圈 /微博。
发说说 /朋友圈 /微博的好处: 1. 功能齐全 2. 节省运营成本 看了你发的东西,我觉得微博比较适合你。 因为微博的搜索功能还是挺完善的,可以删选自己发的内容,也可以筛选 tag 。 |
67
Tomotoes 2020-08-09 23:14:42 +08:00
@wwwaaa 所有静态文件 全都放到了 jsDriver, 其余的就是一些基本的页面优化, 我倒是希望必须挂梯子才能访问我的站点.. 访问速度, seo 什么的 无所谓..
|
68
ShareManT 2020-08-09 23:38:34 +08:00
https://share-man.com/timeline
这是我的一条四五年的时间线。 |
69
screen 2020-08-10 00:02:12 +08:00 via iPhone
这不是把说说,竖过来么
|
70
falcon05 2020-08-10 00:20:31 +08:00 via iPhone
|
72
cmdOptionKana 2020-08-10 09:30:06 +08:00 via Android
@Shook 微博也有缺点:有数据损失风险,撞关键词的风险,界面无法自定义...
|
73
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) ``` |
75
jwenjian OP @learningman 哈哈 牛
|
76
jwenjian OP |
77
jwenjian OP @CallMeReznov 反复性自闭,有时候表达欲特别强调有时候又啥都不想说
|
78
learningman 2020-08-10 13:25:49 +08:00
@ShareManT 这真的很 coooool
|
79
auto8888 2020-08-10 13:59:56 +08:00
确实 有时候有表达欲,而便签什么的又缺失信息
懒得折腾,所以我把微信朋友设置为全不可看,发朋友圈 solo 自嗨 |
81
AnnaXia 2020-08-10 17:04:03 +08:00
#68 @ShareManT 你这个时间线页面挺好看的
为什么说时间线没用呢?感觉用于自己回顾总结的时候挺方便的。 比如每次读完一本书,写个书评,时间线按看书这个 tag,生成一个图,只显示书名,直观显示一年阅读量。 |
82
crc8 2020-08-10 18:00:29 +08:00
我一直想找的博客就是这样的。。。THX
|
83
evilic 2020-08-11 08:57:13 +08:00
我应该是老了。
博客是用来社交的,它和日记不同。所以我的博客选择在 twitter 上,就是日常吐槽之类的。日记的话,我在写在 one note 上,并没有打算公开的想法。 |
84
jwenjian OP 新增:
- 数据分页加载 - 无限滚动模式 |
85
jwenjian OP 新增:
- 暗黑模式 |
86
hertzry 2020-10-06 10:19:30 +08:00 via Android
我看到您是用 vue 什么的,我不懂那些东西。我也不需要自动抓取,怎么能用最简便的方法实现呢?比如打开 public/index.html 就能生成 timeline 页面,希望您能解惑。
|