V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeekHub
jwenjian
V2EX  ›  程序员

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

  •  
  •   jwenjian · 41 天前 · 4176 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

    image.png

    先给链接

    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 文件。

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

    • 手机 app
    • 浏览器插件
    • 命令行
    • 桌面端
    • 网页端
    • 编辑器插件( vscode 等)
    • 微博机器人(@我的 xx 笔记等等)
    • ...

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


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

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

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


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

    第 1 条附言  ·  41 天前

    仓库公开了: https://github.com/jwenjian/timeline

    写了一个教程,想折腾的可以看看,照着这个 wiki 的步骤试试,应该没有大问题,有问题还请回复或者提 issue 指出

    https://github.com/jwenjian/timeline/wiki


    另外,这个想法旨在给大家提供一种思路,抛砖引玉,我的页面记录的东西比较杂,你可以用这个做任何你想记录的东西,比如:

    • 书摘
    • 影评
    • 网络书签
    • 宠物相册

    等等适合用时间线展示的东西。

    第 2 条附言  ·  37 天前
    更新基本告一段落,新增了:

    1. 数据分页存储,分布到多个 data-{index}.json 中
    2. 首页只加载第一页的数据,提高加载速度
    3. 无限滚动模式,上拉加载下一页数据

    v1.0.0 release 。
    第 3 条附言  ·  36 天前
    新增了 暗黑模式,欢迎体验。
    85 条回复    2020-08-13 21:26:51 +08:00
    jwenjian
        1
    jwenjian   41 天前
    没有评论,没有点赞。也不准备加。就是一个静态站点。
    jwenjian
        2
    jwenjian   41 天前
    只有一个页面,没有二级页面,没有 about,没有友链,就是一个 timeline 。
    victor
        3
    victor   41 天前   ❤️ 3
    挽尊。有个节点叫自言自语,了解一下
    jwenjian
        4
    jwenjian   41 天前
    @victor 我的好像不只是自言自语,东西比较杂 😂
    learningman
        5
    learningman   41 天前   ❤️ 1
    这玩意儿我们一般叫朋友圈或者 QQ 空间
    masker
        6
    masker   41 天前 via Android   ❤️ 23
    没人关心你的生活,谢谢。
    DandelionFlowers
        7
    DandelionFlowers   41 天前
    现在自己随身带个可以塞进裤兜小本, 习惯年末再做总结
    DandelionFlowers
        8
    DandelionFlowers   41 天前
    @DandelionFlowers 如果平时的话可能耽误正事(但确实很新颖)
    jwenjian
        9
    jwenjian   41 天前
    @masker sb ?
    masker
        10
    masker   41 天前
    @jwenjian 我和您一样的哦
    tangkaichuan
        11
    tangkaichuan   41 天前 via Android   ❤️ 7
    好的博客是调研、构思、润色的产物,对于自身和他人有一定价值。个人倾向于沉淀下来记录一些有用的文字而不是不痛不痒的口水话。
    hellolex
        12
    hellolex   41 天前   ❤️ 1
    这个不就是微博?
    kuanng
        13
    kuanng   41 天前   ❤️ 1
    能理解楼主的做法
    但是还是想吐槽一下,这不就是微博吗?
    ruyu
        14
    ruyu   41 天前
    正经人谁写日记啊 😂
    FakerLeung
        15
    FakerLeung   41 天前
    不懂为啥 9 楼就直接开喷了。
    eminemcola
        16
    eminemcola   41 天前
    像是一个微博单机版
    yujiang
        17
    yujiang   41 天前 via Android
    微博单机版?手机上装个好用的第三方客户端关掉热门,发送默认成仅自己可见不就行了
    rpish
        18
    rpish   41 天前   ❤️ 1
    😂只有我觉得很棒吗?
    很好看啊 非常适合记录一些国际大事 /生活琐事
    hertzry
        19
    hertzry   41 天前 via Android
    有意思,是托管在 GitHub 上吗?楼主快公开,想搞一搞🤔
    cmdOptionKana
        20
    cmdOptionKana   41 天前 via Android
    很不错,心理负担小,记录更轻松。
    metrue
        21
    metrue   41 天前 via iPhone   ❤️ 1
    我是文中提到的 Giki https://giki.app 的作者,喜欢的朋友欢迎尝试.
    agagega
        22
    agagega   41 天前 via iPhone
    博客不一定就要是长文。很多国外的优秀博客我也订阅了,内容也有很多不长。平时有些想法比小几百字的微博长,但也没长到一篇文章的程度,做博客其实合适
    jwenjian
        23
    jwenjian   41 天前
    @FakerLeung 哈哈 去它的主页看它的回复就懂了
    jwenjian
        24
    jwenjian   41 天前
    @tangkaichuan timeline 只是一个形式,内容是自己决定,可以是口水话,也可以自己沉淀下来的东西,或者单纯做一个书摘,网络书签等等,都可以。
    jwenjian
        25
    jwenjian   41 天前
    @hellolex
    @kuanng

    可以理解成自由度更高的单机版微博,自由度高就是内容比较自由,外链,图片等,另外可以自己修改页面样式之类的。

    而且不需要有社交负担,点赞,评论,转发这些

    而且现在微博实名制,想搞个微博小号,还不如折腾个这。
    jwenjian
        26
    jwenjian   41 天前
    @yujiang 也是一个办法,不折腾,省事儿。
    jwenjian
        27
    jwenjian   41 天前
    @hertzry 嗯,在 github 上,用 netlify 部署,等我整理整理发出来
    jwenjian
        28
    jwenjian   41 天前
    @agagega 确实是这样,只是感觉现在博客的形式对于短文章有些不太合适,不太长的正文被放到了二级页面,需要点击一下才可以看。

    用这种方式,把一些精要的部分全部展示出来,感觉一目了然一些。
    jwenjian
        29
    jwenjian   41 天前
    @DandelionFlowers 这种也很好,正好现在手机使用率太高,写字都很少写了,可以练练写字。。。
    cokar
        30
    cokar   41 天前
    没有互动很难坚持下去的,如果只是自己发自己看,也毫无意义
    yannxia
        31
    yannxia   41 天前
    @metrue sign user failed: 500 - Internal Server Error 微博和 GIthub 都不行咧
    imnaive
        32
    imnaive   41 天前
    我觉得可以把想法和博客文章分成两个 tab 页。
    有想法就像川老师一样直接发出来,
    写文章时就认真写文章。
    lx91714
        33
    lx91714   41 天前 via Android
    样式可以分享吗
    royrs
        34
    royrs   41 天前
    考虑下这个?
    数据还在自己手里面。

    https://sspai.com/post/60024
    asanelder
        35
    asanelder   41 天前
    支持楼主。

    其实这种东西还是有需求的,之所有没有类似的产品,可能是因为没有什么商业价值。

    俺觉得微博早期,可能比较满足,但商业化后就变味了。
    laike9m
        36
    laike9m   41 天前 via Android
    除开想自己管理数据这个理由,其实 Twitter 就能够满足要求了
    masker
        37
    masker   41 天前 via Android
    @FakerLeung 毕竟玻璃心
    KasuganoSoras
        38
    KasuganoSoras   41 天前
    早期做过类似项目,不过是 PHP 写的
    https://github.com/kasuganosoras/Pigeon
    jwenjian
        39
    jwenjian   41 天前
    @lx91714 等下我把 repo 变成公开就可以看到了
    jwenjian
        40
    jwenjian   41 天前
    @imnaive 也不错,这个属于抛砖引玉,可以在这个基础上做自己想做的
    jwenjian
        41
    jwenjian   41 天前
    @royrs 这个我之前就看到了,就是借鉴这种思路做的这个,不过他是通过快捷指令或者 utools 之类的工具写东西,我是找了一个顺手的平台。各有利弊吧。

    另外数据的话,现在的方案是每隔一段时间就全量备份到 github 的仓库 json 文件中,也算是在自己手里吧。
    jwenjian
        42
    jwenjian   41 天前
    @asanelder 我是感觉微博现在更多是社会化,娱乐化的东西了,太花哨了。。。
    jwenjian
        43
    jwenjian   41 天前
    @laike9m 嗯,体验是比微博好,主要是 网络 ...
    jwenjian
        44
    jwenjian   41 天前
    @KasuganoSoras 我这里没打开 tql.ink , 不过看 repo 的介绍,应该是类似的东西,而且比这个更丰富。
    Tomotoes
        45
    Tomotoes   41 天前
    哈哈, 看来有这需求的朋友不少啊.. 我之前也做了一个 https://tomotoes.com/blog/weibo
    可以借鉴一下~

    本来想开发完 就开源下代码, 结果一直拖延到现在...
    jwenjian
        46
    jwenjian   41 天前
    @Tomotoes 我之前就见过你这个页面,挺好的,😄, 时间线确实很简洁,心理负担小,不像博客..
    jwenjian
        47
    jwenjian   41 天前
    想折腾的可以看第一条附言。
    ochatokori
        48
    ochatokori   41 天前 via Android
    我的博客也是这种形式,一条只有三言两语,没评论和点赞,和朋友圈和微博还是很有区别的。

    就是,有些事想说出来满足一下表现欲,又不想别人来干涉的感觉哈哈
    dartabe
        49
    dartabe   41 天前
    支持楼主 挺好看的
    exc
        50
    exc   41 天前
    @Tomotoes 博客首页炫配的效果真棒啊
    mathzhaoliang
        51
    mathzhaoliang   41 天前
    v2 博客帖千千万万,点进去没一个能看的。全是小白文。
    wusheng0
        52
    wusheng0   41 天前 via Android   ❤️ 1
    看到楼上忽然开喷那个,说句题外话,

    每次没登录,看到有些人的发言,想 block,

    结果登录之后发现已经 block 了;

    看来还是本性难移。
    maemual
        53
    maemual   41 天前
    要不开个 Telegram 的 channel?
    raaaaaar
        54
    raaaaaar   41 天前 via Android
    换个平台吧,blog 的话,一般是文章多,你这种算个人日记啥的吧。
    arccoso
        55
    arccoso   41 天前
    知乎,随便写
    metrue
        56
    metrue   40 天前
    @yannxia https://giki.app 的登陆 API 目前显示工作正常,我尝试用 GitHub 和 Weibo 登陆都没有问题,您可以在试试,如果需要帮助,也可以直接联系我.
    yulang
        57
    yulang   40 天前 via Android
    @masker
    masker
        58
    masker   40 天前 via Android
    @yulang 不会说话吗
    jwenjian
        59
    jwenjian   40 天前
    @wusheng0 奥,你们还是能看到的啊,哈哈,我以为我隐藏之后都看不到了
    jwenjian
        60
    jwenjian   40 天前
    @maemual 开 channel 是做什么用?我也没用过这玩意儿。
    jwenjian
        61
    jwenjian   40 天前
    @raaaaaar 确实叫 blog 不太合适,也不是那种很多文章的 blog, 不过想不起来叫啥合适了。
    wwwaaa
        62
    wwwaaa   40 天前
    @Tomotoes #45 哇 为什么你的打开速度在我这儿还挺快的,是有什么黑科技吗?
    yannxia
        63
    yannxia   40 天前
    @metrue 试了下 API 报错是 Error: bad_verification_code - The code passed is incorrect or expired.
    CallMeReznov
        64
    CallMeReznov   40 天前
    看到 LZ 的图,哇,这 NM 自闭倒了一定境界了吧...
    突然又感觉好喜欢的感觉.
    转念一想,我 TM 也自闭啊!
    learningman
        65
    learningman   40 天前   ❤️ 2
    @jwenjian #9 人身攻击 @livid
    Shook
        66
    Shook   40 天前
    你这个就是说说 /朋友圈 /微博。
    发说说 /朋友圈 /微博的好处:
    1. 功能齐全
    2. 节省运营成本

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

    https://hi.cellmean.com/tweets/
    batyu
        71
    batyu   40 天前
    @victor 多少年没见这个词了 毅丝残留
    cmdOptionKana
        72
    cmdOptionKana   40 天前 via Android
    @Shook 微博也有缺点:有数据损失风险,撞关键词的风险,界面无法自定义...
    wwwaaa
        73
    wwwaaa   40 天前
    @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
        74
    metrue   40 天前
    @yannxia 就不在这里浪费公共资源了,如果您需要可以直接联系我 h.minghe # gmail.com
    jwenjian
        75
    jwenjian   40 天前 via iPhone
    @learningman 哈哈 牛
    jwenjian
        76
    jwenjian   40 天前 via iPhone
    @Shook 确实,也可以理解成自定义微博主页,只可惜微博的 API 太那个啥,还是不折腾它了

    而且现在用的是 Giki app 还可以直接同步到微博。
    jwenjian
        77
    jwenjian   40 天前 via iPhone
    @CallMeReznov 反复性自闭,有时候表达欲特别强调有时候又啥都不想说
    learningman
        78
    learningman   40 天前
    @ShareManT 这真的很 coooool
    auto8888
        79
    auto8888   40 天前
    确实 有时候有表达欲,而便签什么的又缺失信息

    懒得折腾,所以我把微信朋友设置为全不可看,发朋友圈 solo 自嗨
    auto8888
        80
    auto8888   40 天前
    @Tomotoes 老哥 这个太帅了
    AnnaXia
        81
    AnnaXia   40 天前
    #68 @ShareManT 你这个时间线页面挺好看的

    为什么说时间线没用呢?感觉用于自己回顾总结的时候挺方便的。

    比如每次读完一本书,写个书评,时间线按看书这个 tag,生成一个图,只显示书名,直观显示一年阅读量。
    crc8
        82
    crc8   39 天前
    我一直想找的博客就是这样的。。。THX
    evilic
        83
    evilic   39 天前
    我应该是老了。

    博客是用来社交的,它和日记不同。所以我的博客选择在 twitter 上,就是日常吐槽之类的。日记的话,我在写在 one note 上,并没有打算公开的想法。
    jwenjian
        84
    jwenjian   37 天前
    新增:

    - 数据分页加载
    - 无限滚动模式
    jwenjian
        85
    jwenjian   36 天前
    新增:

    - 暗黑模式
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2634 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 09:49 · PVG 17:49 · LAX 02:49 · JFK 05:49
    ♥ Do have faith in what you're doing.