<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[Knight&#039;s Blog]]></title> 
<atom:link href="https://blog.knight.vin/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[Knight 的个人博客]]></description>
<link>https://blog.knight.vin/</link>
<language>zh-cn</language>

<item>
    <title>我回来了</title>
    <link>https://blog.knight.vin/27.html</link>
    <description><![CDATA[<p>今天趁着有空整理一下博客，博客的主题我也换了，我感觉这套主题看着清爽多了。<br />
然后就是把复杂的文章分类，杂乱的标签，无用的界面也一并清除了，又看之前测试插件时ai生成的文章不顺眼，也给删了。<del>现在博客看着清爽多了。</del><br />
最近又萌生了开发游戏的想法，也不知道在ai的帮助下能实现吗，估计实现了token也得大残了。</p>]]></description>
    <pubDate>Sun, 04 Oct 2026 11:28:59 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/27.html</guid>
</item>
<item>
    <title>开发计划说明（2026.8.18）</title>
    <link>https://blog.knight.vin/18.html</link>
    <description><![CDATA[<p><del>完善目前这款 Emlog 的主题</del><br />
<del>完善 Emlog 评论插件</del>（放弃）<br />
<del>完工 Emlog 后台美化插件</del>（放弃）</p>]]></description>
    <pubDate>Tue, 18 Aug 2026 03:36:02 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/18.html</guid>
</item>
<item>
    <title>QQ聚合登录系统：开源免费的PHP快捷登录解决方案</title>
    <link>https://blog.knight.vin/8.html</link>
    <description><![CDATA[<h1>QQ聚合登录系统：开源免费的PHP快捷登录解决方案</h1>
<blockquote>
<p>一套基于 PHP + MySQL 的 QQ 登录接入服务，让开发者跳过繁琐的 QQ 互联审核，5 分钟完成第三方登录集成。</p>
</blockquote>
<p><strong>源码下载</strong>：<a href="https://blog.knight.vin/?resource_alias=gZUhVVY386QoSe6s&amp;resource_filename=61f41781325898">QQ快捷登录平台.zip</a></p>
<hr />
<h2>项目定位</h2>
<p>这套系统解决的核心痛点：<strong>QQ 互联官方申请周期长、审核严、门槛高</strong>。通过自建聚合平台，开发者只需注册应用获取 AppID/AppKey，即可调用标准化 API 实现 QQ 一键登录，个人项目与商业项目均可使用。</p>
<p>项目采用 <strong>MIT 协议</strong> 完全开源，无功能阉割、无调用次数限制、无隐藏收费。</p>
<hr />
<h2>核心能力一览</h2>
<table>
<thead>
<tr>
<th style="text-align: left;">维度</th>
<th style="text-align: left;">具体表现</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong>接入效率</strong></td>
<td style="text-align: left;">提供完整 SDK + 多语言示例，5 分钟完成对接</td>
</tr>
<tr>
<td style="text-align: left;"><strong>协议合规</strong></td>
<td style="text-align: left;">标准 OAuth 2.0 授权流程，全程 HTTPS 加密传输</td>
</tr>
<tr>
<td style="text-align: left;"><strong>成本可控</strong></td>
<td style="text-align: left;">零授权费用，零调用次数上限</td>
</tr>
<tr>
<td style="text-align: left;"><strong>数据可视</strong></td>
<td style="text-align: left;">登录趋势、用户分布、应用调用量等报表</td>
</tr>
<tr>
<td style="text-align: left;"><strong>视觉体验</strong></td>
<td style="text-align: left;">Bootstrap 5 响应式布局，PC/移动端自适应</td>
</tr>
<tr>
<td style="text-align: left;"><strong>扩展友好</strong></td>
<td style="text-align: left;">模块化分层架构，二次开发门槛低</td>
</tr>
<tr>
<td style="text-align: left;"><strong>安全基线</strong></td>
<td style="text-align: left;">防 SQL 注入、XSS 过滤、CSRF Token 校验</td>
</tr>
</tbody>
</table>
<hr />
<h2>界面与功能模块</h2>
<h3>前台门户</h3>
<ul>
<li>服务介绍与实时数据大屏</li>
<li>开发者文档与 SDK 下载</li>
</ul>
<h3>用户中心</h3>
<ul>
<li>应用生命周期管理（创建、配置、密钥重置）</li>
<li>登录日志追踪与 IP 分析</li>
<li>账户资料与通知设置</li>
</ul>
<h3>管理后台</h3>
<ul>
<li>开发者账户审核与权限管控</li>
<li>应用上架/下架/冻结</li>
<li>全局配置与运营报表导出</li>
</ul>
<hr />
<h2>技术架构</h2>
<pre><code>┌─────────────────────────────────────────┐
│  表现层  │ 首页 / 用户中心 / 管理后台 / API 文档  │
├─────────────────────────────────────────┤
│  控制层  │ 登录接口 / 回调处理 / 用户管理 / 支付  │
├─────────────────────────────────────────┤
│  业务层  │ 认证服务 / 用户服务 / 日志服务 / 缓存   │
├─────────────────────────────────────────┤
│  数据层  │ MySQL 5.7+ / PDO / 数据库迁移工具      │
├─────────────────────────────────────────┤
│  核心库  │ 数据库类 / 缓存类 / 支付类 / 工具函数   │
└─────────────────────────────────────────┘</code></pre>
<p><strong>技术栈细节</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">层级</th>
<th style="text-align: left;">选型</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">后端运行环境</td>
<td style="text-align: left;">PHP ≥ 7.4，Composer 依赖管理</td>
</tr>
<tr>
<td style="text-align: left;">数据存储</td>
<td style="text-align: left;">MySQL ≥ 5.7，utf8mb4 字符集</td>
</tr>
<tr>
<td style="text-align: left;">前端框架</td>
<td style="text-align: left;">Bootstrap 5 + jQuery + Bootstrap Icons</td>
</tr>
<tr>
<td style="text-align: left;">缓存策略</td>
<td style="text-align: left;">文件缓存（预留 Redis 扩展接口）</td>
</tr>
<tr>
<td style="text-align: left;">通信协议</td>
<td style="text-align: left;">OAuth 2.0 + RESTful API</td>
</tr>
</tbody>
</table>
<hr />
<h2>部署指南</h2>
<h3>环境前置检查</h3>
<ul>
<li>PHP ≥ 7.4（需开启 curl、pdo_mysql 扩展）</li>
<li>MySQL ≥ 5.7</li>
<li>Nginx / Apache</li>
<li><strong>SSL 证书（生产环境强制要求）</strong></li>
</ul>
<h3>三步安装</h3>
<ol>
<li>将源码解压至网站根目录</li>
<li>浏览器访问 <code>http://你的域名/setup/</code> 进入图形化安装向导</li>
<li>填写数据库连接信息与管理后台初始账号，完成安装</li>
</ol>
<h3>Nginx 参考配置</h3>
<pre><code class="language-nginx">server {
    listen 80;
    server_name your-domain.com;
    root /var/www/qq-login-platform;
    index index.php;

    # 伪静态
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP-FPM
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 敏感目录禁止直接访问
    location ~ ^/(core|setup)/.*\.(php|php5)$ {
        deny all;
    }
}</code></pre>
<hr />
<h2>API 对接文档</h2>
<h3>通信规范</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">项</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">传输协议</td>
<td style="text-align: left;">HTTPS（生产环境必需）</td>
</tr>
<tr>
<td style="text-align: left;">数据格式</td>
<td style="text-align: left;">JSON</td>
</tr>
<tr>
<td style="text-align: left;">字符编码</td>
<td style="text-align: left;">UTF-8</td>
</tr>
<tr>
<td style="text-align: left;">请求方法</td>
<td style="text-align: left;">GET / POST</td>
</tr>
<tr>
<td style="text-align: left;">接口基地址</td>
<td style="text-align: left;"><code>https://your-domain.com/</code></td>
</tr>
</tbody>
</table>
<h3>前端集成示例</h3>
<h4>纯 HTML 跳转</h4>
<pre><code class="language-html">&lt;!-- QQ 登录按钮 --&gt;
&lt;a href="https://your-domain.com/connect.php?app_id=YOUR_APP_ID&amp;return_url=YOUR_CALLBACK"&gt;
  &lt;img src="https://img.icons8.com/color/96/qq.png" alt="QQ登录" width="40"&gt;
  QQ 一键登录
&lt;/a&gt;</code></pre>
<h4>JavaScript 动态构造</h4>
<pre><code class="language-javascript">function qqLogin() {
  const params = new URLSearchParams({
    app_id: 'YOUR_APP_ID',
    return_url: window.location.origin + '/callback',
    state: generateRandomString(16)   // 防 CSRF
  });
  window.location.href = 'https://your-domain.com/connect.php?' + params;
}

function generateRandomString(len) {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  return Array.from({length: len}, () =&gt; 
    chars[Math.floor(Math.random() * chars.length)]
  ).join('');
}</code></pre>
<h4>PHP 完整 SDK 调用</h4>
<pre><code class="language-php">&lt;?php
class QQLoginSDK {
    private $appId;
    private $appKey;
    private $apiUrl;

    public function __construct($appId, $appKey, $apiUrl) {
        $this-&gt;appId  = $appId;
        $this-&gt;appKey = $appKey;
        $this-&gt;apiUrl = rtrim($apiUrl, '/') . '/';
    }

    /** 获取 QQ 授权跳转地址 */
    public function getLoginUrl($redirectUri, $state = '') {
        $params = [
            'act'          =&gt; 'login',
            'appid'        =&gt; $this-&gt;appId,
            'appkey'       =&gt; $this-&gt;appKey,
            'type'         =&gt; 'qq',
            'redirect_uri' =&gt; $redirectUri,
            'state'        =&gt; $state
        ];
        $url  = $this-&gt;apiUrl . 'connect.php?' . http_build_query($params);
        $data = json_decode($this-&gt;httpGet($url), true);

        if ($data['code'] === 0) return $data['url'];
        throw new Exception('获取登录地址失败: ' . $data['msg']);
    }

    /** 用授权码换取用户信息 */
    public function getUserInfo($code) {
        $params = [
            'act'    =&gt; 'callback',
            'appid'  =&gt; $this-&gt;appId,
            'appkey' =&gt; $this-&gt;appKey,
            'type'   =&gt; 'qq',
            'code'   =&gt; $code
        ];
        $url  = $this-&gt;apiUrl . 'connect.php?' . http_build_query($params);
        $data = json_decode($this-&gt;httpGet($url), true);

        if ($data['code'] === 0) {
            return [
                'openid'   =&gt; $data['social_uid'],
                'nickname' =&gt; $data['nickname'],
                'avatar'   =&gt; $data['faceimg'],
                'gender'   =&gt; $data['gender'],
                'location' =&gt; $data['location'],
                'ip'       =&gt; $data['ip']
            ];
        }
        throw new Exception('获取用户信息失败: ' . $data['msg']);
    }

    private function httpGet($url) {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER =&gt; 1,
            CURLOPT_SSL_VERIFYPEER =&gt; false,
            CURLOPT_TIMEOUT        =&gt; 30
        ]);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
}

// 使用示例
try {
    $sdk = new QQLoginSDK('YOUR_APP_ID', 'YOUR_APP_KEY', 'https://api.your-domain.com/');

    // 跳转到授权页
    $loginUrl = $sdk-&gt;getLoginUrl('https://your-site.com/callback', 'random_state');
    header('Location: ' . $loginUrl);

    // 回调处理
    if (isset($_GET['code'])) {
        $user = $sdk-&gt;getUserInfo($_GET['code']);
        echo "登录成功，欢迎 {$user['nickname']}";
    }
} catch (Exception $e) {
    echo "错误：" . $e-&gt;getMessage();
}
?&gt;</code></pre>
<hr />
<h2>接口清单</h2>
<h3>1. 获取登录地址</h3>
<pre><code>GET /connect.php?act=login</code></pre>
<p><strong>请求参数</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">必填</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">appkey</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用密钥</td>
</tr>
<tr>
<td style="text-align: left;">type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">固定值 <code>qq</code></td>
</tr>
<tr>
<td style="text-align: left;">redirect_uri</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">回调地址，需 URL 编码</td>
</tr>
<tr>
<td style="text-align: left;">state</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">CSRF 防护随机串</td>
</tr>
</tbody>
</table>
<p><strong>正常响应</strong></p>
<pre><code class="language-json">{
  "code": 0,
  "msg": "succ",
  "type": "qq",
  "url": "https://graph.qq.com/oauth2.0/authorize?..."
}</code></pre>
<h3>2. 回调换取用户信息</h3>
<pre><code>GET /connect.php?act=callback</code></pre>
<p><strong>请求参数</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">必填</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">appkey</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用密钥</td>
</tr>
<tr>
<td style="text-align: left;">type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">固定值 <code>qq</code></td>
</tr>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">QQ 授权码</td>
</tr>
</tbody>
</table>
<p><strong>正常响应</strong></p>
<pre><code class="language-json">{
  "code": 0,
  "msg": "succ",
  "type": "qq",
  "social_uid": "QQ_OPENID",
  "access_token": "ACCESS_TOKEN",
  "nickname": "用户昵称",
  "faceimg": "https://thirdqq.qlogo.cn/...",
  "gender": "男",
  "location": "北京",
  "ip": "192.168.1.1"
}</code></pre>
<h3>3. 快捷查询已登录用户信息</h3>
<pre><code>GET /connect.php?act=query</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">必填</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">appkey</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">应用密钥</td>
</tr>
<tr>
<td style="text-align: left;">type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">固定值 <code>qq</code></td>
</tr>
<tr>
<td style="text-align: left;">social_uid</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">用户 OpenID</td>
</tr>
</tbody>
</table>
<hr />
<h2>目录结构</h2>
<pre><code>qq-login-platform/
├── core/                 # 核心框架
│   ├── Lib/              # 基础类库
│   │   ├── Db.php        # PDO 数据库封装
│   │   ├── Cache.php     # 缓存管理
│   │   ├── Pay.php       # 支付相关
│   │   └── ...
│   ├── helpers/
│   │   └── functions.php # 全局辅助函数
│   ├── App.php           # 应用容器
│   ├── bootstrap.php     # 启动引导
│   └── config.php        # 全局配置
├── manager/              # 管理后台
│   ├── index.php
│   ├── apps.php          # 应用审核
│   ├── members.php       # 用户管理
│   └── ...
├── member/               # 用户中心
│   ├── index.php
│   ├── apps.php          # 我的应用
│   ├── login.php
│   └── ...
├── pay/                  # 支付回调
│   ├── notify.php        # 异步通知
│   └── return.php        # 同步跳转
├── setup/                # 安装向导
│   ├── index.php
│   └── database.sql      # 初始表结构
├── static/               # 静态资源
│   └── css/
│       └── style.css
├── runtime/              # 运行时（需可写）
│   └── cache/
├── index.php             # 门户首页
├── connect.php           # 核心登录接口
├── docs.php              # 在线文档
└── README.md</code></pre>
<hr />
<h2>安全基线</h2>
<ol>
<li><strong>全站 HTTPS</strong>：生产环境必须配置 SSL，杜绝明文传输</li>
<li><strong>密钥隔离</strong>：AppKey 仅用于服务端通信，禁止暴露到前端</li>
<li><strong>回调白名单</strong>：redirect_uri 必须与注册域名一致</li>
<li><strong>CSRF 防御</strong>：state 参数必填，回调时校验一致性</li>
<li><strong>注入防护</strong>：全站 PDO 预处理语句，参数化查询</li>
<li><strong>XSS 过滤</strong>：模板输出统一使用 <code>htmlspecialchars</code> 编码</li>
</ol>
<hr />
<h2>更新记录</h2>
<h3>v1.0.0（2026-04-26）</h3>
<ul>
<li>项目首次发布</li>
<li>完成 QQ 登录接入链路</li>
<li>交付管理后台 + 用户中心 + 开发文档 + SDK</li>
</ul>
<hr />
<h2>开源协议</h2>
<p><strong>MIT License</strong></p>
<pre><code>Copyright (c) 2026 Knight

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</code></pre>
<hr />
<h2>联系与反馈</h2>
<ul>
<li>邮箱：3514574884@qq.com</li>
<li>QQ 群：901336980</li>
</ul>
<blockquote>
<p>感谢每一位使用和支持这个项目的朋友。</p>
</blockquote>
<p><strong>维护者</strong>：Knight<br />
<strong>最后更新</strong>：2026 年 4 月 26 日</p>]]></description>
    <pubDate>Mon, 17 Aug 2026 22:35:27 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/8.html</guid>
</item>
<item>
    <title>我为 Emlog 开发了一款 Android 客户端：支持文章写作、微语发布与 AI 辅助创作</title>
    <link>https://blog.knight.vin/16.html</link>
    <description><![CDATA[<h1>首先进入大家最喜欢的源码和成品环节</h1>
<p><strong>源码：</strong></p>
<p><a href="/?resource_alias=0fR8FX8dbfKzLXZv&amp;resource_filename=1da91786979297">EmlogStudio-v0.4.3-source.zip</a></p>
<p><strong>成品：</strong></p>
<p><a href="/content/uploadfile/202608/55781786979043.apk">EmlogStudio-v0.4.3.apk</a></p>
<hr />
<p>一直以来，我都用 Emlog 搭建个人博客。这套系统本身已经足够成熟，但日常使用中逐渐暴露出一个明显的问题：<strong>电脑端管理很方便，手机端临时创作却体验糟糕</strong>。</p>
<p>比如突然想到一个点子想发微语，或者人在外面需要修改文章，甚至只想让 AI 帮忙整理初稿——都得打开浏览器、登录后台，在专为 PC 设计的界面里艰难操作。</p>
<p>于是我干脆做了一款面向 Emlog 的 Android 客户端。</p>
<p>它并非要取代 Emlog 后台，而是把最常用的内容创作功能抽离出来，重新设计成更适合手机使用的 App。</p>
<hr />
<h2>一、产品定位：移动端的 Emlog 创作工具</h2>
<p>这款 App 的核心定位很清晰：<strong>专门服务于 Emlog 的移动端写作与内容管理工具</strong>。</p>
<p>目前围绕三大场景展开：</p>
<ul>
<li><strong>文章管理</strong>：新建、编辑、删除</li>
<li><strong>微语发布</strong>：快速记录短内容</li>
<li><strong>AI 辅助创作</strong>：结构化写作支持</li>
</ul>
<p>目标不是把后台所有设置塞进手机，而是实现一套完整的内容发布闭环：</p>
<blockquote>
<p>想到内容 → 打开 App → 写作 / AI 辅助 → 预览 → 发布</p>
</blockquote>
<p>这才是它与「用手机浏览器进后台」的本质区别。</p>
<hr />
<h2>二、连接自有站点，数据完全自主</h2>
<p>App 本身不是博客平台，也不会把文章存到第三方服务。<strong>它连接的就是你自己的 Emlog 网站</strong>。</p>
<p>配置站点信息后，客户端直接与 Emlog 通信。所有发布、修改、删除操作，最终都落回你自己的站点数据。换手机、重装客户端，网站数据不会受到任何影响。</p>
<p><strong>网站始终是核心，App 只是增加了更适合手机的入口。</strong></p>
<hr />
<h2>三、文章管理：从创建到发布的完整流程</h2>
<p>文章功能是客户端目前最重要的模块，不只是放一个「发布文章」的输入框：</p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong>新建文章</strong></td>
<td style="text-align: left;">临时记录想法或完整撰写长文</td>
</tr>
<tr>
<td style="text-align: left;"><strong>编辑文章</strong></td>
<td style="text-align: left;">已发布内容随时修改，无需开电脑</td>
</tr>
<tr>
<td style="text-align: left;"><strong>删除文章</strong></td>
<td style="text-align: left;">具备真正的内容管理能力，而非单纯「投稿」</td>
</tr>
</tbody>
</table>
<hr />
<h2>四、Markdown + 实时预览</h2>
<p>我个人偏好 Markdown，但它在手机上有明显痛点：<strong>写的时候看到的是符号，不是最终排版</strong>。</p>
<pre><code class="language-markdown">## 标题
**加粗文字**
&gt; 引用内容
- 列表 1
- 列表 2</code></pre>
<p>长文编辑时很容易失去对排版的直观感知。因此 App 加入了<strong>实时预览功能</strong>，编辑时可随时查看渲染效果。</p>
<p>已支持的 Markdown 语法包括：标题、粗体、斜体、删除线、引用、有序/无序列表、链接、图片、代码、代码块、分割线等。</p>
<p>写作流程由此变为：</p>
<pre><code>Markdown 编辑 → 实时预览 → 检查排版 → 发布到 Emlog</code></pre>
<p>相比盲写，直观得多。</p>
<hr />
<h2>五、微语：接近社交 App 的发布体验</h2>
<p>Emlog 的「微语」是我很喜欢的功能，适合一句话、一个想法、开发记录、学习笔记等碎片化内容。<strong>这类短内容恰恰最应该在手机上便捷发布</strong>。</p>
<p>客户端希望实现的体验是：</p>
<blockquote>
<p>想到什么 → 打开 App → 写完直接发</p>
</blockquote>
<p>而非：</p>
<blockquote>
<p>打开浏览器 → 找后台 → 登录 → 找微语入口 → 开始输入</p>
</blockquote>
<p><strong>减少操作步骤，对短内容创作至关重要。</strong></p>
<hr />
<h2>六、AI 辅助：工具，而非替代</h2>
<p>项目中我很重视 AI 功能，但明确拒绝这种设计：「点一下按钮，自动生成一篇垃圾文章」。</p>
<p>我希望 AI 是<strong>写作工具</strong>，而非<strong>写作替代</strong>。比如只有一个模糊想法时，AI 可以帮忙：</p>
<ul>
<li>整理文章结构</li>
<li>生成初稿</li>
<li>补充章节</li>
<li>润色表达</li>
<li>将零散想法系统化</li>
</ul>
<p>生成内容会进入编辑器，最终由用户自己修改、增删、预览、决定是否发布。<strong>本质上是「辅助写作」，不是「AI 自动发博客」。</strong></p>
<hr />
<h2>七、多模型支持，拒绝绑定单一厂商</h2>
<p>国内大模型发展极快，今天性价比高的，明天可能就有更好的。因此 AI 模块采用<strong>独立 Provider 架构</strong>，不与任何单一厂商绑定。</p>
<p>重点适配的模型包括：</p>
<ul>
<li><strong>DeepSeek</strong></li>
<li><strong>智谱 GLM</strong></li>
<li><strong>Kimi</strong></li>
<li><strong>小米 MiMo</strong></li>
</ul>
<p>每个厂商独立保存 API 配置（API Key、地址、模型名），写作时自由选择。新增模型无需重构 AI 模块。</p>
<pre><code>AI 服务
├── DeepSeek ── API Key / 地址 / 模型
├── GLM ────── API Key / 地址 / 模型
├── Kimi ───── API Key / 地址 / 模型
└── MiMo ───── API Key / 地址 / 模型</code></pre>
<p><strong>客户端提供能力，模型由用户自己选择。</strong></p>
<hr />
<h2>八、为什么不做成网页版？</h2>
<p>常见问题：Emlog 有后台，手机浏览器也能打开，何必专门做 App？</p>
<p>这是两个不同的问题：</p>
<table>
<thead>
<tr>
<th style="text-align: left;"></th>
<th style="text-align: left;">网页后台</th>
<th style="text-align: left;">这款 App</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">解决的问题</td>
<td style="text-align: left;">「能不能管理网站？」</td>
<td style="text-align: left;">「手机上管理舒不舒服？」</td>
</tr>
<tr>
<td style="text-align: left;">界面复杂度</td>
<td style="text-align: left;">包含系统设置、模板、插件、用户、评论、分类等全套功能</td>
<td style="text-align: left;">只聚焦：写文章、改文章、发微语、AI 辅助、预览、发布</td>
</tr>
</tbody>
</table>
<p>传统 CMS 后台功能庞杂，界面天然复杂。但移动端最高频的操作其实非常集中。</p>
<p>所以我更希望它是 <strong>「Emlog Mobile Creator」</strong>，而非把 PC 后台硬塞进 6 英寸屏幕。</p>
<hr />
<h2>九、架构设计：模块化解耦</h2>
<p>源码会完整开放，整体架构如下：</p>
<pre><code>Emlog Android Client
│
├── 站点配置       # 管理 Emlog 站点连接信息
├── Emlog 通信层   # 客户端与站点的数据交互
├── 文章模块       # 列表、新建、编辑、删除
├── 微语模块       # 读取、发布、编辑
├── 编辑器         # Markdown 输入、实时预览
├── AI 模块        # Provider 管理、多模型适配
└── 本地配置       # 站点信息、AI 设置</code></pre>
<p><strong>Emlog 通信、编辑器、AI 三部分尽量解耦</strong>。未来新增 AI 模型或 Emlog 管理功能，无需推倒重写。</p>
<hr />
<h2>十、为什么开放源码？</h2>
<p>一个重要原则：<strong>不要把 Emlog 这种开放生态，最后做成封闭的客户端</strong>。</p>
<p>除 APK 外，完整源码一并提供。有开发能力的用户可以：</p>
<ul>
<li>自行编译 APK</li>
<li>修改界面与功能</li>
<li>接入新的 AI 模型</li>
<li>调整 Emlog 对接逻辑</li>
<li>研究 Android 与 Emlog 的通信方式</li>
</ul>
<p><strong>即使我个人停止维护，源码存在，项目就能被社区延续。</strong></p>
<hr />
<h2>十一、当前状态：持续打磨中</h2>
<p>项目仍在积极开发，最近集中解决真实使用中的体验问题：</p>
<ul>
<li>手机输入时的页面跳动</li>
<li>新建与编辑文章的输入体验差异</li>
<li>微语编辑流畅度</li>
<li>Markdown 预览兼容性</li>
<li>AI 请求等待与异常处理</li>
<li>不同厂商接口差异</li>
<li>Android 稳定性与闪退</li>
</ul>
<p>越来越深的体会是：<strong>「能运行」的 App 很容易，「每天愿意打开」的 App 才是真正难做的。</strong></p>
<p>很多体验问题，只有自己真的拿手机写几篇文章才会发现。</p>
<hr />
<h2>十二、后续规划：向「移动创作中心」演进</h2>
<h3>更完整的文章管理</h3>
<p>分类、标签、草稿、封面、搜索、分页、发布状态等更多文章属性。</p>
<h3>更强的 AI 编辑能力</h3>
<p>从「生成整篇文章」进化到<strong>针对选中内容</strong>执行：续写、润色、缩写、扩写、总结、改标题、生成摘要/SEO 描述、修正 Markdown 等。</p>
<h3>更好的编辑器</h3>
<p>提升输入体验、光标稳定性、代码块与表格支持、编辑/预览切换流畅度。</p>
<h3>更多 Emlog 管理能力</h3>
<p>内容创作主线稳定后，逐步加入评论管理、分类/标签管理、媒体资源、多站点支持等。</p>
<p><strong>原则：先把写作做好，再考虑扩展。</strong></p>
<hr />
<h2>十三、写在最后</h2>
<p>这款客户端是我近期 Emlog 改造系列的一部分。之前更多折腾前台主题、后台界面、Markdown 体验、微语、评论等，<strong>Android 客户端相当于把整个系统向移动端自然延伸</strong>。</p>
<p>目标不是重做博客 CMS，而是基于 Emlog 成熟的能力，把<strong>网站、移动端、AI 创作</strong>真正串联：</p>
<pre><code>┌──────────────┐
│  AI 模型     │
│  DeepSeek 等 │
└──────┬───────┘
       │
       ↓
手机 → Emlog Android App → 编辑/预览 → Emlog 站点</code></pre>
<ul>
<li>网站数据属于自己</li>
<li>AI 服务自行选择</li>
<li>客户端源码自己掌握</li>
</ul>
<p>这或许更符合个人博客的本意：<strong>自己的内容，自己的服务器，自己的工具</strong>。</p>
<p>项目仍在完善。后续有稳定新版本，我会继续记录开发过程，同步更新 APK 与源码。</p>]]></description>
    <pubDate>Mon, 17 Aug 2026 22:33:57 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/16.html</guid>
</item>
<item>
    <title>态势感知：未来十年 (SITUATIONAL AWARENESS: The Decade Ahead)</title>
    <link>https://blog.knight.vin/9.html</link>
    <description><![CDATA[<p><strong>作者：Leopold Aschenbrenner</strong> <strong>发布时间：2024年6月</strong></p>
<p>在旧金山，你能最先看到未来。</p>
<p>在过去的一年里，城里热议的话题已经从百亿美元的计算集群，转向了千亿美元的集群，再到如今万亿美元的集群。每隔六个月，董事会的计划书上就会多加一个零。在幕后，人们正在激烈地争夺这十年里所有还能拿到的电力合同，以及所有能采购到的变压器。美国的大企业正准备投入数万亿美元，开启一场久违的美国工业力量大动员。到本世纪20年代末，美国的电力产量将增长百分之几十；从宾夕法尼亚州的页岩气田到内华达值的太阳能农场，数以亿计的 GPU 将发出轰鸣。</p>
<p>AGI（通用人工智能）竞赛已经打响。我们正在建造能够思考和推理的机器。到 2025/2026 年，这些机器的能力将超越许多大学毕业生。到这十年结束时，它们将比你我都要聪明；我们将拥有真正意义上的超级智能。在此过程中，半个世纪以来未曾见过的国家安全力量将被释放；用不了多久，“那个项目”（The Project）就会正式启动。如果幸运的话，我们将与中共展开一场全力以赴的竞赛；如果不幸的话，那将是一场全面战争。</p>
<p>现在人人都在谈论 AI，但很少有人能隐约意识到即将受到怎样的冲击。英伟达的分析师依然认为 2024 年可能已接近顶峰。主流权威们依然固执且盲目地认为“它只是在预测下一个词”。他们看到的只有炒作和一切照旧的商业模式；最多，他们只是在期待又一场互联网级别的技术变革。</p>
<p>不久之后，世界将会觉醒。但现在，也许只有几百个人拥有“态势感知”（situational awareness），他们大多在旧金山和各大 AI 实验室里。无论是因为何种奇特的命运力量，我发现自己也置身其中。几年前，这些人还被嘲笑为疯子——但他们相信趋势线，这使得他们准确预测了过去几年 AI 的发展。这些人对未来几年的预测是否同样准确，还有待观察。但他们是非常聪明的人——是我见过的最聪明的人——而且正是他们正在构建这项技术。也许他们将成为历史上一个古怪的注脚，又或者他们会像西拉德（Szilard）、奥本海默（Oppenheimer）和泰勒（Teller）一样被载入史册。如果他们看到的未来哪怕只有一点点接近现实，我们都将迎来一段疯狂的旅程。</p>
<p>让我来告诉你我们看到了什么。</p>
<hr />
<h2>目录 (Table of Contents)</h2>
<p><em>每篇文章都可以独立成篇，但我强烈建议将整个系列作为一个整体来阅读。</em></p>
<h3>引言（本页）</h3>
<p>历史正在旧金山鲜活地上演。</p>
<h3>I. 从 GPT-4 到 AGI：计算数量级 (Counting the OOMs)</h3>
<p>到 2027 年实现 AGI 是极具可能性的。从 GPT-2 到 GPT-4，我们在 4 年时间里实现了从“大约学龄前儿童”到“大约聪明的高中生”能力的跨越。追踪计算量（每年约 0.5 个数量级或 OOMs）、算法效率（每年约 0.5 个数量级）以及“解除束缚”（unhobbling，从聊天机器人演进到智能体）的趋势线，我们有理由预期，到 2027 年，将会出现另一次从“学龄前儿童到高中生”规模的质的飞跃。</p>
<h3>II. 从 AGI 到超级智能：智能爆炸 (The Intelligence Explosion)</h3>
<p>AI 的进步不会停留在人类水平。数亿个 AGI 可以将 AI 研究自动化，将十年的算法进步（5 个以上数量级）压缩到不到 1 年内。我们将迅速从人类水平的 AI 跃升为大幅超越人类的超级智能系统。超级智能的力量——及其危险——都将是极具戏剧性的。</p>
<h3>III. 挑战 (The Challenges)</h3>
<ul>
<li><strong>IIIa. 竞逐万亿美元计算集群</strong> 一场最为非凡的技术资本加速运动已经启动。随着 AI 收入的急剧增长，在本世纪 20 年代末之前，将有数万亿美元投入到 GPU、数据中心和电力的建设中。这场工业大动员将非常激烈，包括使美国的发电量增长百分之几十。</li>
<li><strong>IIIb. 封锁实验室：AGI 的安全性</strong> 美国顶尖的 AI 实验室将安全问题视为事后诸葛亮。目前，他们基本上是在把通向 AGI 的关键机密双手奉送给中共。保护 AGI 的机密和权重（weights）免受国家级威胁者的窃取将是一项艰巨的工作，而我们目前并未步入正轨。</li>
<li><strong>IIIc. 超级对齐 (Superalignment)</strong> 可靠地控制比我们聪明得多的 AI系统仍是一个未解决的技术难题。尽管这是一个可以解决的问题，但在快速的智能爆炸期间，事情很容易脱轨。管理这一过程将极度令人紧张；一旦失败，极易导致灾难性的后果。</li>
<li><strong>IIId. 自由世界必须获胜</strong> 超级智能将带来决定性的经济和军事优势。中国还完全没有出局。在 AGI 的竞赛中，自由世界的生死存亡将受到考验。我们能否保持对威权主义大国的优势？我们又能否在这一过程中避免自我毁灭？</li>
</ul>
<h3>IV. 那个项目 (The Project)</h3>
<p>随着 AGI 竞赛的加剧，国家安全机构将会介入。美国政府将从沉睡中苏醒，到 2027/2028 年，我们将看到某种形式的政府 AGI 项目。没有任何初创公司能够掌控超级智能。在某个敏感信息隔离设施 (SCIF) 的深处，终局之战即将开启。</p>
<h3>V. 临别感言 (Parting Thoughts)</h3>
<p>如果我们是对的呢？</p>
<hr />
<p><strong>本系列的下一篇文章：</strong> <strong>I. 从 GPT-4 到 AGI：计算数量级</strong></p>
<p><em>声明：虽然我曾在 OpenAI 工作，但本文所有内容均基于公开信息、我自己的想法、一般的领域知识或旧金山坊间的传闻。</em></p>
<p><em>致谢：感谢 Collin Burns, Avital Balwit, Carl Shulman, Jan Leike, Ilya Sutskever, Holden Karnofsky, Sholto Douglas, James Bradbury, Dwarkesh Patel 等人富有启发性的讨论。感谢许多朋友对初稿的反馈。感谢 Joe Ronan 在图表方面的帮助，以及 Nick Whitaker 在出版方面的协助。</em></p>
<p><strong>献给 Ilya Sutskever。</strong></p>]]></description>
    <pubDate>Mon, 18 May 2026 00:31:00 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/9.html</guid>
</item>
<item>
    <title>vin聚合登录各种对接插件下载</title>
    <link>https://blog.knight.vin/7.html</link>
    <description><![CDATA[<h1>vin聚合登录 - 各种网站程序集成插件汇总</h1>
<p>以下是各种网站程序集成<a href="https://log.knight.vin">vin聚合登录</a>接口的插件下载，此文章会不断更新。</p>
<hr />
<h2>魔方财务系统插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202111/idcsmart.zip">idcsmart.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/public/plugins/oauth</code> 目录解压，然后在后台【系统】→【第三方登录】配置并开启即可。</p>
<p><strong>包含登录方式：</strong> QQ、微信、支付宝、微博、百度（共5种）</p>
<hr />
<h2>Discuz!X论坛插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202111/discuzx_plugins.zip">discuzx_plugins.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/source/plugin</code> 目录解压，然后在后台插件列表就可以看到。</p>
<p><strong>包含登录方式：</strong> QQ、微信（2种）</p>
<p><strong>兼容版本：</strong> DiscuzX 3.2~3.5版本，兼容utf-8、gbk、big5编码</p>
<hr />
<h2>SWAPIDC插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202111/swapidc_plugin.zip">swapidc_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/swap_mac/swap_plugins</code> 目录解压，导入 <code>install.sql</code> 到数据库，然后在后台插件设置开启。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝（4种）</p>
<hr />
<h2>WHMCS插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202111/whmcs_plugin.zip">whmcs_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
直接上传到根目录解压，在后台&quot;插件模块&quot;开启，并配置信息，然后在顶部&quot;插件管理&quot;→&quot;彩虹聚合登录&quot;，查看模板变量，自行修改模板文件。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝（4种）</p>
<p><strong>注意：</strong> 只支持 WHMCS 8.x 版本</p>
<hr />
<h2>WordPress博客插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202112/wordpress_plugin.zip">wordpress_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/wp-content/plugins</code> 目录解压，然后在后台插件列表启用即可。</p>
<p><strong>包含登录方式：</strong> QQ、微信、支付宝、微博、百度、华为、钉钉、谷歌、微软、Facebook、Twitter（11种）</p>
<p><strong>注意：</strong> 有些主题（如子比主题）已经默认集成了彩虹聚合登录，不需要安装该插件。</p>
<hr />
<h2>Z-Blog博客插件</h2>
<h3>LayCenter版</h3>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202112/zblog_laycenter_plugin.zip">zblog_laycenter_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
需要先安装 LayCenter 插件，然后上传到 <code>/zb_users/LayCenter</code> 目录解压（如果没有 LayCenter 文件夹就新建一个），然后在 LayCenter 后台应用列表启用即可。</p>
<p><strong>包含登录方式：</strong> QQ、微信、支付宝、微博（4种）</p>
<h3>YtUser版</h3>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202112/zblog_ytuser_plugin.zip">zblog_ytuser_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
需要先安装 YtUser 插件，然后上传到 <code>/zb_users/plugin/YtUser</code> 目录解压覆盖，在 <code>login.php</code> 里面修改接口地址，在后台填写 QQ 登录的 appid 和 appkey。</p>
<hr />
<h2>Emlog博客插件</h2>
<p><strong>下载地址：</strong></p>
<ul>
<li><a href="https://blog.cccyun.cn/content/uploadfile/202112/emlog_plugin.zip">emlog_plugin.zip</a>（适用于 emlog 5.3.1 版本）</li>
<li><a href="https://blog.cccyun.cn/content/uploadfile/202404/emlog_pro_plugin.zip">emlog_pro_plugin.zip</a>（适用于 emlog pro 版本）</li>
</ul>
<p><strong>使用方法：</strong><br />
上传到 <code>/content/plugins</code> 目录解压，然后在后台插件列表开启。</p>
<p><strong>包含登录方式：</strong> QQ（1种）</p>
<hr />
<h2>Typecho博客插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202112/typecho_plugin.zip">typecho_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/usr/plugins</code> 目录解压，在后台插件列表开启即可。</p>
<p><strong>包含登录方式：</strong> QQ、微信、支付宝、微博（4种）</p>
<p><strong>注意：</strong> 插件开启后需要自行修改模板代码，加入登录按钮代码。</p>
<p><strong>Typecho 1.2.1 版本Bug修复：</strong></p>
<ul>
<li>下载地址：<a href="https://blog.cccyun.cn/content/uploadfile/202311/Request.zip">Request.zip</a></li>
<li>修复方法：解压到 <code>/var/Typecho</code> 目录下</li>
</ul>
<hr />
<h2>苹果CMS V10插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202202/clogin_maccms10.zip">clogin_maccms10.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到根目录解压，在后台&quot;整合登录配置&quot;配置好密钥开启即可。</p>
<p><strong>包含登录方式：</strong> QQ、微信（2种）</p>
<p><strong>注意：</strong> 在 <code>/extend/login/ThinkOauth.php</code> 里面可以改登录接口地址。</p>
<hr />
<h2>HYBBS插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202202/hybbs_plugin.zip">hybbs_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/Plugin</code> 目录解压。</p>
<p><strong>包含登录方式：</strong> QQ、微信（2种）</p>
<hr />
<h2>XiunoBBS插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202204/xiunobbs_plugin.zip">xiunobbs_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/plugin</code> 目录解压。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝（4种）</p>
<hr />
<h2>Eyoucms插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202203/eyoucms_plugin.zip">eyoucms_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到根目录解压覆盖，直接替换原有的 QQ、微信、微博登录。</p>
<hr />
<h2>Flarum论坛插件</h2>
<p><strong>安装命令：</strong></p>
<pre><code class="language-bash">composer require cccyun/flarum-clogin-oauth</code></pre>
<p><strong>使用方法：</strong><br />
安装好之后在后台开启。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博（3种）</p>
<hr />
<h2>FastAdmin插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202205/fastadmin_addon.zip">fastadmin_addon.zip</a></p>
<p><strong>使用方法：</strong></p>
<ol>
<li>打开 <code>/vendor/karsonzhang/fastadmin-addons/src/addons/Service.php</code>，把 <code>Service::valid($params);</code> 这一行注释掉</li>
<li>然后在后台插件管理，点击本地安装</li>
</ol>
<hr />
<h2>阿帕云插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202301/apayun_plugin.zip">apayun_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
需要申请阿帕云开发者权限，然后上传插件（如果提示插件标识已存在，可以把插件代码里面所有 D8Login 替换成新的插件标识），在后台&quot;我开发的插件&quot;里面安装。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝、百度（5种）</p>
<hr />
<h2>XunRuiCMS插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202310/xunruicms-plugin.zip">xunruicms-plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到根目录解压覆盖，分别在文件里面修改接口地址，在后台填写 appid 和 appkey。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博（3种）</p>
<hr />
<h2>魔方业务V10插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202406/idcsmart_business.zip">idcsmart_business.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/public/plugins/oauth</code> 解压，在后台 系统设置→三方登录 里面开启。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝、百度、钉钉等</p>
<hr />
<h2>ProKvm插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202503/prokvm_addons.zip">prokvm_addons.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/application/addons</code> 解压，在后台应用列表开启，然后点击刷新缓存。</p>
<p><strong>包含登录方式：</strong> QQ、微信、微博、支付宝、百度、钉钉等</p>
<hr />
<h2>乐众IDC插件</h2>
<p><strong>下载地址：</strong> <a href="https://blog.cccyun.cn/content/uploadfile/202503/lzsys_login_plugin.zip">lzsys_login_plugin.zip</a></p>
<p><strong>使用方法：</strong><br />
上传到 <code>/plugin/login</code> 解压，在后台 供应渠道→登录/注册 里面开启。</p>
<p><strong>包含登录方式：</strong> QQ、微信（2种）</p>]]></description>
    <pubDate>Thu, 09 Apr 2026 22:51:00 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/7.html</guid>
</item>
<item>
    <title>换回typecho</title>
    <link>https://blog.knight.vin/6.html</link>
    <description><![CDATA[<p><del>emlog的生态太差了</del></p>
<p>2026/10/4<br />
又换回来了，emlog功能多一些，我懒得折腾了</p>]]></description>
    <pubDate>Wed, 08 Apr 2026 20:52:00 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/6.html</guid>
</item>
<item>
    <title>从豆包手机被封杀到智谱开源掀桌,我看到了中国AI最精彩的一场攻防战！</title>
    <link>https://blog.knight.vin/5.html</link>
    <description><![CDATA[<h1>这10天，中国AI圈，发生了一件很有意思的事</h1>
<p>不，应该说，是一系列很有意思的事。</p>
<hr />
<h2>豆包手机，横空出世</h2>
<p>12月1日，字节跳动旗下的豆包团队，发布了一个叫&quot;豆包手机助手&quot;的东西。</p>
<p>配合中兴的nubia M153工程样机，一起面向开发者发售。</p>
<p>说实话，刚看到这个消息的时候，我还没太当回事。</p>
<p>毕竟，手机助手这种东西，华为有小艺，小米有小爱，OPPO有小布。</p>
<p>不都是喊一嗓子，帮你定个闹钟、查个天气吗？</p>
<p>但是。</p>
<p>当我真正看到豆包手机助手的演示视频时，我整个人都不好了。</p>
<p>它不只是能帮你定闹钟。</p>
<p>它能帮你点外卖。</p>
<p>它能帮你订机票。</p>
<p>它能帮你在淘宝、京东、拼多多之间比价。</p>
<p>它能帮你回复微信消息。</p>
<p>它甚至能帮你玩小程序游戏。</p>
<p>你只需要说一句话，它就自己打开App，自己点击，自己滑动，自己操作。</p>
<p>就跟你雇了一个真人助理一样。</p>
<p>这玩意儿。。。</p>
<p>不是手机助手，这是手机&quot;自动驾驶&quot;啊。</p>
<p>360的周鸿祎看完之后，发了一条视频，原话是：</p>
<blockquote>
<p>&quot;美团淘宝的高管们可能要连夜开会了。&quot;</p>
</blockquote>
<p>我觉得他说得挺对的。</p>
<p>其实你想想看。</p>
<p>过去，你想买一件衣服，你得打开淘宝，看首页推荐，刷信息流，看广告，然后搜索，比价，看看哪款更适合自己，然后加购物车。</p>
<p>比如说，我之前帮我前任妈妈挑选产品时就会去大量搜索相关的知识，然后找到最适合她的产品去购买，等到我回过神来，发现自己已经花了大半天时间了。</p>
<p><strong>阿姨选购乳胶枕要点：</strong></p>
<ul>
<li>水洗工艺：2次以上更不容易发黄</li>
<li>橡胶含量：93%+</li>
<li>邓禄普工艺：压陷率25%，支撑高度在7.5cm，支撑强度强</li>
<li>特拉雷工艺：压陷率45%，支撑高度在6.5cm，积温更低</li>
<li>阿姨选特拉雷工艺，更软，透气性更好，压缩后6.5cm左右更佳</li>
<li>布套可以拆洗，水温40°C以内手洗，内芯轻轻拍打就行</li>
<li>仰睡8-10cm，侧睡10-12cm</li>
</ul>
<p><strong>微波炉选购要点：</strong></p>
<ol>
<li>
<p><strong>主要作用</strong>：</p>
<ul>
<li>加热食品（热饭菜方便）热东西很快，烤东西很慢</li>
<li>解冻肉类（恒温控制，快速解冻）</li>
<li>食物的烘干</li>
</ul>
</li>
<li>
<p><strong>底盘选择</strong>：</p>
<ul>
<li><strong>转盘式</strong>：
<ul>
<li>优点：加热均匀，经济实惠</li>
<li>缺点：可用空间小，不易清洁</li>
</ul></li>
<li><strong>平板式</strong>：
<ul>
<li>优点：方便清洁，空间够大</li>
<li>缺点：食材一多不易受热均匀</li>
</ul></li>
</ul>
</li>
</ol>
<p>现在呢？</p>
<p>你只需要说一句：&quot;帮我找一件200块以内的黑色卫衣，在淘宝京东拼多多比个价，最便宜的那个帮我加购物车。&quot;</p>
<p>然后，你就可以去干别的了。</p>
<p>AI会帮你搞定一切。</p>
<p>你甚至都不需要打开淘宝的首页。</p>
<p>淘宝首页的广告位，没人看了。</p>
<p>美团首页的推荐位，没人看了。</p>
<p>所有超级App花了十几年时间，精心设计的&quot;流量漏斗&quot;，被AI直接绕过去了。</p>
<p><strong>这，才是让大厂们睡不着觉的原因！</strong></p>
<hr />
<h2>大厂反击率先出手</h2>
<p>豆包手机发布之后，资本市场先沸腾了。</p>
<p>12月2日，中兴通讯直接涨停，成交额超过137亿。</p>
<p>那台3499元的工程样机，一度在闲鱼上被炒到了6000多块。</p>
<p>但是。</p>
<p>就在同一天晚上，有用户发现，自己的绿泡泡被封了。</p>
<p>提示是：&quot;登录环境异常&quot;。</p>
<p>而这些被封号的用户，有一个共同点：</p>
<p>他们都在用豆包手机助手，操作绿泡泡。</p>
<p>消息传出来之后，社群里一片哗然。</p>
<p>有人说，这是&quot;定点打击&quot;。</p>
<p>有人说，这是&quot;大厂围剿&quot;的开始。</p>
<p>《中国企业家》去问，回应是：&quot;没有什么特别动作。&quot;</p>
<p>但行业里的人都懂。</p>
<p>这次封号只是第一枪。</p>
<p>果然，紧接着，淘宝也出手了。</p>
<p>有用户发现，用豆包手机助手在淘宝比价的时候，会频繁跳出人机验证。</p>
<p>有的直接闪退，有的被强制登出账号。</p>
<p>再然后，农业银行、建设银行的App也开始出现针对性的风控措施。</p>
<p>在录屏状态下，银行App直接不让用了。</p>
<p>你看，这就是大厂的反应速度。</p>
<p>72小时之内，Vx、淘宝、银行，三道防线全部架起来了。</p>
<p>周鸿祎预测得没错：</p>
<blockquote>
<p>&quot;大厂绝不会坐视不管，接下来会展开技术攻防战。&quot;</p>
</blockquote>
<p>12月3日晚上，豆包手机助手团队发了一条公告。</p>
<p>原话是：</p>
<blockquote>
<p>&quot;豆包手机助手Pro模式已经下线操作vx的能力。在Nubia M153上被禁止登录的vx账号正陆续解封，请大家等待一段时间并尝试重新登录。&quot;</p>
</blockquote>
<p>说实话，看到这条公告的时候，我是有点失望的。</p>
<p>但我也理解。</p>
<p>毕竟，vx是什么？</p>
<p>是12亿人的社交基础设施。</p>
<p>是很多人的数字生命线。</p>
<p>豆包再牛，也不能让用户的vx被封吧？</p>
<p>这个锅，字节背不起。</p>
<p>更何况，豆包手机助手本来就是个&quot;技术预览版&quot;，是给开发者玩的工程机。</p>
<p>字节从一开始就说了，这不是面向普通消费者的产品。</p>
<p>所以，退让，是意料之中的选择。</p>
<p>但问题是，退让之后呢？</p>
<p>AI手机助手这个方向，还能不能走下去？</p>
<p>如果每个超级App都像Vx一样，一言不合就封号，那AI助手不就成了一个&quot;孤岛&quot;吗？</p>
<p>说白了，你只能在自己的App里玩，出了门就寸步难行。</p>
<p>这还叫什么&quot;智能助手&quot;?</p>
<p>我当时觉得，AI手机可能要凉一阵子了。</p>
<p>但我没想到，真正的高潮，还在后面。</p>
<hr />
<h2>智谱掀桌，AutoGLM开源</h2>
<p>12月9日。</p>
<p>就在我以为这件事要告一段落的时候，智谱AI投下了一颗重磅炸弹。</p>
<p>他们宣布，开源AutoGLM。</p>
<p>开源链接在此：<a href="https://github.com/zai-org/Open-AutoGLM">https://github.com/zai-org/Open-AutoGLM</a></p>
<p><strong>AutoGLM是什么？</strong></p>
<p>简单说，它就是智谱版的&quot;豆包手机助手&quot;。</p>
<p>一个能像真人一样操作手机的AI Agent。</p>
<p>能点外卖，能订机票，能刷抖音，能发微信。</p>
<p>而且，智谱这次开源的，不是一个阉割版。</p>
<p>是完整的核心模型、Phone Use能力框架、工具链，还有覆盖50多个高频中文App的可跑通Demo。</p>
<p>换句话说，只要你愿意，你现在就可以自己搭建一个&quot;豆包手机助手&quot;。</p>
<p>不需要字节的许可，不需要中兴的手机，不需要任何人的授权。</p>
<p>技术，完全公开。</p>
<p>代码，随便拿。</p>
<p>智谱在公告里说了一句话，我印象特别深：</p>
<blockquote>
<p>&quot;这件事只在一家公司做，是不够的。AutoGLM开源的第一层初衷，是把这一层能力变成整个行业可以共同拥有、共同打磨的公共底座。&quot;</p>
</blockquote>
<p>说实话，看到这句话的时候，我鸡皮疙瘩都起来了。</p>
<p>这是什么意思？</p>
<p>意思是：</p>
<p>大厂可以围剿豆包。</p>
<p>但大厂没办法围剿整个开源社区。</p>
<p>你可以封杀一家公司。</p>
<p>但你封不了千千万万个基于开源框架自己搭建的Agent。</p>
<p>这，就叫&quot;掀桌&quot;。</p>
<hr />
<h2>流量入口之争</h2>
<p>说到这里，我想聊一个更本质的问题。</p>
<p>这场攻防战，到底在争什么？</p>
<p><strong>表面上看，是隐私安全：</strong></p>
<ul>
<li>Vx说，你读取我的聊天记录，不安全。</li>
<li>淘宝说，你抓取我的商品数据，不合规。</li>
<li>银行说，你在录屏状态下操作，有风险。</li>
</ul>
<p>这些理由，对不对？</p>
<p>当然对。</p>
<p>但真正的原因，显然不止于此。</p>
<p><strong>真正的原因是：流量入口之争。</strong></p>
<p>其实你想想看，过去十几年，互联网大厂是怎么赚钱的？</p>
<p>答案是：<strong>流量！</strong></p>
<p>你打开淘宝，首页有广告位，你刷信息流，又有广告，你搜索商品，还有竞价排名。</p>
<p>每一次点击，每一次浏览，都是钱。</p>
<p>微信也一样。</p>
<p>朋友圈广告，小程序广告，公众号广告，视频号广告。</p>
<p>12亿用户的注意力，就是腾讯最大的金矿。</p>
<p>但现在，AI手机助手来了。</p>
<p>它可以绕过首页，绕过广告，绕过信息流，直接帮你完成任务。</p>
<p>用户的注意力，被AI&quot;截胡&quot;了。</p>
<p>大厂能不急吗？</p>
<p>这不是什么隐私问题。</p>
<p><strong>这是断人财路的生死存亡的问题。</strong></p>
<p>所以，封号，风控，限制。</p>
<p>本质上，都是在保护自己的流量入口。</p>
<p>但问题是，保护得了吗？</p>
<p>技术的潮水，不是一两道防线能挡住的。</p>
<hr />
<h2>开源，才是真正的&quot;核武器&quot;</h2>
<p>说实话，智谱这次开源，让我想起了一句话：</p>
<blockquote>
<p>&quot;最好的防守，就是进攻。&quot;</p>
</blockquote>
<p>不对，应该是：</p>
<blockquote>
<p>&quot;最好的反围剿，就是让技术成为公共品。&quot;</p>
</blockquote>
<p>其实你想想看，历史上那些改变世界的技术，最后都走向了什么？</p>
<ul>
<li>Linux开源了，所以我们今天有了安卓，有了云计算。</li>
<li>Stable Diffusion开源了，所以AI绘画才能遍地开花。</li>
<li>LLaMA开源了，所以国产大模型才有了追赶的起点。</li>
</ul>
<p>每一次开源，都是一次技术民主化。</p>
<p>每一次开源，都是对封闭生态的一次冲击。</p>
<p>智谱这次开源AutoGLM，意义是一样的。</p>
<p>它把AI手机助手这个能力，从&quot;大厂核武器&quot;变成了&quot;人人可用的工具&quot;。</p>
<p>以后，不只是字节能做AI手机。</p>
<p>华为能做，小米能做，OPPO能做，甚至你自己，也能做。</p>
<p><strong>大厂可以消灭一个产品，但大厂消灭不了一个想法。</strong></p>
<p>技术的演进，从来不是某一家公司能阻挡的。</p>
<p>当年的微软阻挡不了Linux。</p>
<p>今天的大厂，也未必能阻挡AI Agent。</p>
<hr />
<h2>微软与Linux的历史</h2>
<p>说到这里，我突然想起了一个故事。</p>
<p>2001年，微软的CEO史蒂夫·鲍尔默，在接受媒体采访时，说了一句后来被载入史册的话：</p>
<blockquote>
<p>&quot;Linux是一种癌症。&quot;</p>
</blockquote>
<p>他还说，Linux在知识产权上&quot;像癌细胞一样，会附着于它所碰到的一切&quot;。</p>
<p>那时候的微软，如日中天。</p>
<p>Windows垄断了全球90%以上的电脑操作系统市场。</p>
<p>而Linux，只是一群程序员在业余时间捣鼓的开源项目。</p>
<p>微软觉得，这玩意儿就是个玩具。</p>
<p>于是，微软开始了长达十几年的&quot;围剿Linux&quot;行动。</p>
<ul>
<li>专利诉讼，有。</li>
<li>资助SCO起诉IBM，有。</li>
<li>散布FUD（恐惧、不确定、怀疑），有。</li>
</ul>
<p>能用的手段，全都用上了。</p>
<p>结果呢？</p>
<p>Linux不仅没死。</p>
<p>反而成了服务器市场的主流。</p>
<p>安卓基于Linux，统治了移动端。</p>
<p>云计算的底层，几乎都跑在Linux上。</p>
<p>2014年，微软换了CEO。</p>
<p>新任CEO纳德拉上台后，说了一句让整个科技圈都震惊的话：</p>
<blockquote>
<p>&quot;Microsoft Loves Linux。&quot;</p>
</blockquote>
<p>微软，爱，Linux。</p>
<p>更绝的是，2020年，微软总裁布拉德·史密斯公开承认：</p>
<blockquote>
<p>&quot;当开源在本世纪初爆发时，微软站在了历史的错误一边。&quot;</p>
</blockquote>
<p><strong>站在了历史的错误一边。</strong></p>
<p>这句话，太狠了。</p>
<hr />
<h2>历史的重演</h2>
<p>为什么要讲这个故事？</p>
<p>因为我觉得，历史总是惊人的相似。</p>
<table>
<thead>
<tr>
<th>24年前</th>
<th>24年后</th>
</tr>
</thead>
<tbody>
<tr>
<td>微软围剿Linux</td>
<td>大厂围剿AI Agent</td>
</tr>
<tr>
<td>微软说Linux是癌症</td>
<td>大厂说AI手机助手侵犯隐私</td>
</tr>
<tr>
<td>Linux选择了开源</td>
<td>智谱也选择了开源</td>
</tr>
<tr>
<td>微软以为自己能消灭Linux</td>
<td>大厂以为自己能封杀AI Agent</td>
</tr>
</tbody>
</table>
<p>结果呢？</p>
<p>Linux没有被消灭，反而成了整个互联网的基石。</p>
<p>AI Agent会被封杀吗？</p>
<p>我不知道答案。</p>
<p>但我知道一件事：</p>
<p>大厂可以消灭一个产品，但大厂消灭不了一个想法。</p>
<p>技术的演进，从来不是某一家公司能阻挡的。</p>
<p>当年的微软阻挡不了Linux。</p>
<p>今天的大厂，也未必能阻挡AI Agent。</p>
<hr />
<h2>这跟我们有什么关系？</h2>
<p>说了这么多，你可能会问：</p>
<p>这些大厂之间的攻防战，跟我有什么关系？</p>
<p>其实关系很大。</p>
<p>因为这件事的本质，是在决定未来我们怎么用手机。</p>
<p>其实你想想看。</p>
<p><strong>过去十几年，我们用手机的方式是什么？</strong></p>
<p>是&quot;打开App&quot;。</p>
<ul>
<li>想买东西，打开淘宝。</li>
<li>想点外卖，打开美团。</li>
<li>想聊天，打开微信。</li>
</ul>
<p>每一个需求，都对应一个App。</p>
<p><strong>但未来呢？</strong></p>
<p>如果AI手机助手真的普及了，我们用手机的方式可能会变成：</p>
<p><strong>&quot;说一句话&quot;。</strong></p>
<p>你只需要告诉AI你想干什么，AI就帮你搞定一切。</p>
<p>你甚至不需要知道淘宝和京东有什么区别，不需要知道美团和饿了么哪个便宜。</p>
<p>AI会帮你比较，帮你选择，帮你下单。</p>
<p>这意味着什么？</p>
<ul>
<li>意味着App的&quot;界面&quot;不再重要了。</li>
<li>意味着&quot;用户注意力&quot;的分配方式，要彻底改变了。</li>
<li>意味着过去十几年建立的互联网商业模式，可能要被重写了。</li>
</ul>
<p>这不是危言耸听。</p>
<p><strong>这是正在发生的事情。</strong></p>
<p>AI手机助手能帮我们做的，是那些重复的、机械的、没有创造性的操作：</p>
<ul>
<li>比价</li>
<li>下单</li>
<li>订票</li>
<li>查天气</li>
<li>设闹钟</li>
</ul>
<p>这些事情，交给AI就好了。</p>
<p>而我们自己呢？</p>
<p>应该把时间和精力，留给那些更难、也更值得的事情。</p>
<p>比如，去读一本难一点的书。</p>
<p>比如，去和朋友聊一场更长的天。</p>
<p>比如，去想清楚自己到底想要什么。</p>
<p><strong>AI越来越强大，不是为了让我们变得更懒。</strong></p>
<p><strong>而是为了让我们有更多的时间和空间，去做那些只有人类才能做的事情。</strong></p>
<hr />
<h2>结语</h2>
<p>这10天，我看到了大厂的围剿，也看到了开源的反击。</p>
<p>我看到了技术的力量，也看到了商业的博弈。</p>
<p>我看到了24年前的历史，也看到了它在今天的重演。</p>
<p>但最让我感慨的，还是那句话：</p>
<blockquote>
<p>技术的潮水，终究是挡不住的。</p>
</blockquote>
<p>而我们能做的，就是学会在潮水中游泳。</p>
<p>24年前，微软说Linux是癌症。</p>
<p>24年后，微软说我爱Linux。</p>
<p><strong>历史总是惊人的相似。</strong></p>
<p><strong>而站在历史正确的一边，从来都不晚。</strong></p>]]></description>
    <pubDate>Wed, 21 Jan 2026 03:36:00 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/5.html</guid>
</item>
<item>
    <title>重拾 emlog，为青春记忆充值</title>
    <link>https://blog.knight.vin/4.html</link>
    <description><![CDATA[<p><strong>记得第一次搭建博客，用的就是 emlog。</strong></p>
<p>昨晚凌晨，无意间点进了 <a href="https://emlog.net">emlog</a> 的官网，那些年熬夜折腾的回忆瞬间涌上心头。还记得第一次建网站时，为了绑定一个域名，从深夜折腾到天明，虽然过程艰辛，但那份成就感至今难忘。</p>
<p>或许是一时冲动，或许是情怀使然，我花了 169 元买了赞助版。就当是，为回忆买一次单吧。</p>]]></description>
    <pubDate>Fri, 16 Jan 2026 03:38:19 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/4.html</guid>
</item>
<item>
    <title>好久不见，我的博客</title>
    <link>https://blog.knight.vin/3.html</link>
    <description><![CDATA[<p>距离上次建立博客，已过去两年。回望2018年至今，我数不清自己断断续续搭建了多少次博客。每一次开始都满怀热忱，而每一次中断却总是悄无声息。</p>
<p>今天，借着帮别人搭建项目的服务器之便，加上刚刚结束期末考试的空闲，我再次将博客搭建起来。这次，我花了更多时间挑选和配置主题。如今的主题选择比以往丰富，颜值提升不少，但设置起来也更为复杂。我之前购买的 Handsome 主题，配置项多到令人头疼，如今回看，其设计风格也不过尔尔。</p>
<p>踏破铁鞋无觅处，得来全不费工夫。皇天不负有心人，我终于找到一款令人眼前一亮的主题。它简约而不简单，功能实用，风格恰合我意。</p>
<p>记录是个好习惯，希望这一次我能坚持下去。虽然这不知是第几次重新启程，但每次开始都蕴含新希望。愿此行我不再半途而废。</p>]]></description>
    <pubDate>Mon, 12 Jan 2026 23:42:08 +0800</pubDate>
    <dc:creator>Knight</dc:creator>
    <guid>https://blog.knight.vin/3.html</guid>
</item>
</channel>
</rss>