MoreRSS

site iconruyo | 如有乐享修改

分享一些网络资源。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

ruyo | 如有乐享的 RSS 预览

Microsoft Rewards 每天赚积分:2个月轻松兑换百元天猫卡

2026-07-10 08:38:54

Microsoft Rewards 每天200+积分,兑换天猫卡加油卡教程
Microsoft Rewards 是一项免费会员计划,只需使用 Microsoft 产品和服务即可赚取积分。积分可兑换礼品卡、抽奖资格、慈善捐赠等奖励。

这项计划已经上线多年了!最近几年积分能兑换天猫礼品卡,中石化加油卡等等,非常受国内童鞋的喜爱!

活动地址

https://51.ruyo.net/bing-rewards

 

获取积分

方法1:获取积分方式也非常简单!按要求完成签到,搜索,日常任务,每日任务等等,连续签到和完成任务积分更多。每天轻轻松松获取 200+积分!

一般情况2个月多即可兑换价值100元的礼品卡!

 

方法2:邀请好友参与活动。只要被邀请的好友完成打卡任务获取积分,邀请人也能获得积分。

 

自动脚本

目前网上有自动化Python脚本,也有利用篡改猴的脚本。博主还是建议每天花几分钟操作一下。实在没时间可以试一试下面的。

脚本地址:https://greasyfork.org/zh-CN/scripts/532315-%E5%BE%AE%E8%BD%AFbing-%E5%BF%85%E5%BA%94%E7%A7%AF%E5%88%86%E8%87%AA%E5%8A%A8%E8%84%9A%E6%9C%AC-microsoft-bing-rewards-script

在Edge浏览器安装扩展篡改猴后,安装以上脚本(关于篡改猴主要注意事项,之前的文章有介绍:https://51.ruyo.net/19346.html)。

打开必应搜索页面(cn.bing.com/search 或 www.bing.com/search)。

先手动任意搜索一次,脚本会在页面右下角显示一个浮动工具栏,自动开始搜索任务。

 

 

最后说明

账号所属国家地区有误?主要在在兑换礼品的时候。如果出现下图提示:在外出?你正在预览在你的初始国家/地区以外的目录。你可以查看物品,但无法兑换。

说明你的账号没有被标记到中国大陆,不能兑换各种适合国内的礼品卡。

解决方案1:换账号,如果你是刚开始弄,可以直接重新注册一个账号!

解决方案2:检查以下2个地址,登录账号查看所属国家地区是否正确?第二个地址是账单地址,只保留一个中国大陆的账单 地址。

account.microsoft.com/profile

account.microsoft.com/billing/addresses

重新登录账号!

解决方案3:联系微软客服:rewards.bing.com/support,发送内容请客服帮忙修改所属国家地区。

 

 

 

 

 

 

Cloudflare Pages免费申请教程:抢注专属 .pages.dev 域名

2026-07-02 08:40:52

 

Pages.dev 快速搭建网站, 速度超快。 Cloudflare Pages 是一个 JAMstack 平台,供前端开发人员协作和部署网站。

 

官方地址

https://pages.dev

 

免费限制

项目 免费版限制
Pages 项目数 最多约 100 个项目(软限制,可申请提高)
每月构建(Build) 500 次/月
并发构建 1 个
每个站点文件数 20,000 个文件)
单个文件大小 25 MB
自定义域名 支持,可绑定多个自定义域名
HTTPS 免费自动签发 SSL 证书
CDN 全球 CDN,无需额外配置
带宽 官方未设置固定带宽配额,但要求符合服务条款,不适合视频、大文件分发等用途

简要步骤

1,访问官网注册账号,如已注册Cloudflare,可直接登录!

2,点击 【Workers 和 Pages】或者访问:dash.cloudflare.com/?account=pages

3,右侧点击【创建应用程序】

4,这里必须如图点击访问:【想要部署Pages? 开始使用 】,要不然就是创建的Worker

 

5,项目名称,下面会显示分配的 .pages.dev 域名;如果你的项目名称没被注册就会注册一个专属的域名!

 

6,然后上传静态文件,然后点击【部署站点】

 

7,部署成功后,可绑定自定义域名等操作!

 

演示地址

ruyonet.pages.dev

 

最后总结

1,大家可以抓紧抢注一个自己心仪的  *.pages.dev 域名。

注意:.pages.dev 域名由 Cloudflare 自动分配,无法提前注册或抢注,项目名未被占用时才可生成对应子域名!

2,Pages支持连接Github仓库部署项目。

3,100个站点不够?访问这里可申请提高额度:forms.gle/eX6pXvit1wBv77Yw5

4,部署的站点国内可以访问,不过速度一般。

5,为什么看到的是 workers.dev? 因为新版 Cloudflare 正在统一 Pages 和 Workers 平台。

 

 

 

无需公网IP!用UU远程一键映射端口,远程访问内网设备

2026-06-30 08:40:10

最近体验了一下 UU远程 的新版本,发现新增了一个 端口映射 功能。

这个功能对开发和运维人员来说非常实用。很多时候,我们需要将远程服务器或内网设备上的某个服务(例如 Docker 管理平台、数据库等)映射到本地进行访问和调试。

以前通常会选择 FRP、NPS 等内网穿透方案,但前提是需要准备一台拥有公网 IP 的服务器。用一些免费的内网穿透网速又慢的一批。

而 UU远程 的端口映射则省去了这些步骤,无需公网 IP,也无需自行部署穿透服务,只要主控端和被控端登录同一个账号,即可快速完成端口映射,使用体验非常不错。

 

历史文章:网易UU远程,可能是目前最好的免费远程控制软件

 

限制要求

1,UU远程需要更新到最新版本(26年5月以后的版本)

2,必须登录同一个账号;

3,目前支持Windows主控端;

4,仅支持TCP协议端口映射;

5,支持穿透被控端内网所有IP端口;

 

操作演示

这里我们演示一下,如何在公司的电脑上,访问家里的OpenWrt

家庭PC 的IP:192.168.31.110

OpenWrt的IP:192.168.31.199

OpenWrt 管理平台端口:80

 

1,我的设备 - 选择被控设备(家庭PC) -  更多  -  端口映射

 

 

2,名称随意,本地端口(随意,没有被占用即可),目标地址(被控端内网IP,或者内网其他设备IP),目标端口

 

3,映射成功后,本地直接访问 127.0.0.1:13398 即可!

 

内网互通

在家庭可完全打通公司内网,堪比VPN;当然这种操作是存在风险的!一定要谨慎!

1,在公司的电脑上启动一个代理软件,之前博主推荐过不少。最近博主使用3Proxy比较多:内网服务器利用跳板机代理访问公网:3Proxy

2,启动3Proxy后,在UU远程中配置一个端口转发,将被控端的808端口穿透出来

3,系统 - 网络和Internet - 代理 - 手动设置代理 - 地址 127.0.0.1 端口填写映射的端口

点击保存后网络就通了!如果你想访问公司内网IP,比如:192.168.1.1 仅需将下图中的文本框内的:192.168.* 删除掉即可!

这样192.168的IP也可以走代理了!

 

另一个妙用!

此处内容需要关注微信才能查看

由于内容特殊性,请见谅!
微信扫码关注公众号,回复:访问密码,即可获取密码!

 

最后说明

端口映射一定要确保安全,切勿随意穿透。避免不必要的麻烦!

 

腾讯 Agent 专属邮箱来了,附CLI安装与Python API封装

2026-06-29 08:28:23

腾讯 Agent 专属邮箱来了,附CLI安装与Python API封装

Agent Mail,是 QQ 邮箱团队为 Agent 打造的专属邮箱服务。与个人邮箱隔离,原生适配 Agent,助力你安全、高效地使用 Agent 收发邮件。

看似非常不错的功能,之前网易也推出类似服务:ClawEmail  并未激起太大的水花~

 

官方地址

agent.qq.com

 

使用限制

1,仅限微信扫码登录

2,同时拥有2个 @agent.qq.com 邮箱

3,每个邮箱每天限制发送 50封邮件,收信不限制,1Gb容量

4,发信必须使用Agent才可以

5,邮箱前缀随机分配,也可修改为自己心仪的前缀(抓紧选自己的心仪前缀)

 

实名认证

目前平台还未强制要求实名认证!实名认证仅需填写姓名,必须和微信实名姓名一致即完成实名。

 

 

 

简单体验

1,首先用腾讯自家的 WorkBuddy,配置好之后,确实可以发送邮件!没有太多难度!

 

2,这里推荐大家体验一下华为云的 AI Shell。历史文章:华为云AI Shell体验:免费4核7G云服务器,附自动保活脚本

仅需将提示词在AI Shell中发给AI

请阅读 https://agent.qq.com/doc/cli-setup.md 文档,按照步骤为我安装并配置 Agent Mail CLI。

 

 

封装API

可用使用代码封装一下,利用API发信!

"""
Agently Mail API - Python wrapper for agently-cli email operations.

Usage:
    from agently_mail import send_email, list_messages, read_message, search_messages

    # Send email
    result = send_email(
        to=["[email protected]"],
        subject="Hello",
        body="<p>This is a test email.</p>"
    )

    # List messages
    messages = list_messages(limit=10)
"""

import subprocess
import json
import os
from typing import Optional, List, Dict, Any, Union


def _run_cli(args: List[str], input_data: Optional[str] = None) -> Dict[str, Any]:
    """
    Execute agently-cli command and return parsed JSON result.
    
    Args:
        args: Command arguments (e.g., ["message", "+send", "--to", "[email protected]"])
        input_data: Optional stdin data
        
    Returns:
        Parsed JSON response as dict
        
    Raises:
        RuntimeError: If command fails
    """
    cmd = ["agently-cli"] + args
    
    result = subprocess.run(
        cmd,
        capture_output=True,
        text=True,
        input=input_data,
        timeout=60
    )
    
    if result.stdout:
        try:
            return json.loads(result.stdout)
        except json.JSONDecodeError:
            pass
    
    if result.returncode != 0:
        raise RuntimeError(f"CLI error: {result.stderr or 'Unknown error'}")
    
    return {"ok": True, "data": None}


def send_email(
    to: Union[str, List[str]],
    subject: str,
    body: Optional[str] = None,
    body_file: Optional[str] = None,
    cc: Optional[Union[str, List[str]]] = None,
    bcc: Optional[Union[str, List[str]]] = None,
    attachments: Optional[Union[str, List[str]]] = None,
    body_format: Optional[str] = None,
    dry_run: bool = False,
    auto_confirm: bool = True
) -> Dict[str, Any]:
    """
    Send an email via agently-cli.
    
    Args:
        to: Recipient email address(es). Required.
        subject: Email subject. Required.
        body: Email body content (HTML or plain text).
        body_file: Path to file containing email body (alternative to body).
        cc: CC recipient(s).
        bcc: BCC recipient(s).
        attachments: File path(s) to attach.
        body_format: Force body format ('plain' or 'html').
        dry_run: Print API calls without executing.
        auto_confirm: Automatically confirm and send (default True).
        
    Returns:
        Dict with 'ok' and 'data' fields containing send result.
        
    Example:
        result = send_email(
            to=["[email protected]", "[email protected]"],
            subject="Meeting Tomorrow",
            body="<p>Hi all,</p><p>Let's meet at 10am.</p>",
            cc=["[email protected]"]
        )
    """
    # Normalize recipients to list
    if isinstance(to, str):
        to = [to]
    if cc and isinstance(cc, str):
        cc = [cc]
    if bcc and isinstance(bcc, str):
        bcc = [bcc]
    if attachments and isinstance(attachments, str):
        attachments = [attachments]
    
    # Build command arguments
    args = ["message", "+send"]
    
    for recipient in to:
        args.extend(["--to", recipient])
    
    args.extend(["--subject", subject])
    
    if body:
        args.extend(["--body", body])
    elif body_file:
        args.extend(["--body-file", body_file])
    else:
        raise ValueError("Either 'body' or 'body_file' must be provided")
    
    if cc:
        for c in cc:
            args.extend(["--cc", c])
    
    if bcc:
        for b in bcc:
            args.extend(["--bcc", b])
    
    if attachments:
        for att in attachments:
            args.extend(["--attachment", att])
    
    if body_format:
        args.extend(["--body-format", body_format])
    
    if dry_run:
        args.append("--dry-run")
    
    # First call - get confirmation token
    result = _run_cli(args)
    
    # Check if confirmation is required
    if result.get("ok") and result.get("data", {}).get("confirmation_required"):
        confirmation_token = result["data"].get("confirmation_token")
        
        if not auto_confirm or not confirmation_token:
            # Return for manual confirmation
            return result
        
        # Second call - confirm and send
        args.extend(["--confirmation-token", confirmation_token])
        result = _run_cli(args)
    
    return result


def list_messages(
    limit: Optional[int] = None,
    folder: Optional[str] = None,
    unread_only: bool = False
) -> Dict[str, Any]:
    """
    List emails in inbox.
    
    Args:
        limit: Maximum number of messages to return.
        folder: Folder to list (e.g., 'inbox', 'sent').
        unread_only: Only return unread messages.
        
    Returns:
        Dict with 'ok' and 'data' fields containing message list.
    """
    args = ["message", "+list"]
    
    if limit:
        args.extend(["--limit", str(limit)])
    
    if folder:
        args.extend(["--folder", folder])
    
    if unread_only:
        args.append("--unread-only")
    
    return _run_cli(args)


def read_message(message_id: str) -> Dict[str, Any]:
    """
    Read a specific email message.
    
    Args:
        message_id: The message ID to read.
        
    Returns:
        Dict with 'ok' and 'data' fields containing message content.
    """
    args = ["message", "+read", "--id", message_id]
    return _run_cli(args)


def search_messages(query: str, limit: Optional[int] = None) -> Dict[str, Any]:
    """
    Search emails by keyword.
    
    Args:
        query: Search keyword.
        limit: Maximum number of results.
        
    Returns:
        Dict with 'ok' and 'data' fields containing search results.
    """
    args = ["message", "+search", "--q", query]
    
    if limit:
        args.extend(["--limit", str(limit)])
    
    return _run_cli(args)


def reply_to_message(
    message_id: str,
    body: str,
    reply_all: bool = False
) -> Dict[str, Any]:
    """
    Reply to an email message.
    
    Args:
        message_id: The message ID to reply to.
        body: Reply body content.
        reply_all: Reply to all recipients.
        
    Returns:
        Dict with 'ok' and 'data' fields containing reply result.
    """
    args = ["message", "+reply", "--id", message_id, "--body", body]
    
    if reply_all:
        args.append("--reply-all")
    
    result = _run_cli(args)
    
    # Handle two-phase confirmation
    if result.get("ok") and result.get("data", {}).get("confirmation_required"):
        confirmation_token = result["data"].get("confirmation_token")
        if confirmation_token:
            args.extend(["--confirmation-token", confirmation_token])
            result = _run_cli(args)
    
    return result


def forward_message(
    message_id: str,
    to: Union[str, List[str]],
    body: Optional[str] = None
) -> Dict[str, Any]:
    """
    Forward an email message.
    
    Args:
        message_id: The message ID to forward.
        to: Recipient email address(es).
        body: Optional additional body content.
        
    Returns:
        Dict with 'ok' and 'data' fields containing forward result.
    """
    if isinstance(to, str):
        to = [to]
    
    args = ["message", "+forward", "--id", message_id]
    
    for recipient in to:
        args.extend(["--to", recipient])
    
    if body:
        args.extend(["--body", body])
    
    result = _run_cli(args)
    
    # Handle two-phase confirmation
    if result.get("ok") and result.get("data", {}).get("confirmation_required"):
        confirmation_token = result["data"].get("confirmation_token")
        if confirmation_token:
            args.extend(["--confirmation-token", confirmation_token])
            result = _run_cli(args)
    
    return result


def upload_attachment(file_path: str) -> Dict[str, Any]:
    """
    Upload a file as attachment.
    
    Args:
        file_path: Path to the file to upload.
        
    Returns:
        Dict with 'ok' and 'data' fields containing upload result.
    """
    args = ["attachment", "+upload", "--file", file_path]
    return _run_cli(args)


def download_attachment(message_id: str, attachment_id: str, output_path: Optional[str] = None) -> Dict[str, Any]:
    """
    Download an attachment from a message.
    
    Args:
        message_id: The message ID.
        attachment_id: The attachment ID.
        output_path: Optional path to save the file.
        
    Returns:
        Dict with 'ok' and 'data' fields containing download result.
    """
    args = ["attachment", "+download", "--msg", message_id, "--att", attachment_id]
    
    if output_path:
        args.extend(["--output", output_path])
    
    return _run_cli(args)


def get_user_info() -> Dict[str, Any]:
    """
    Get current user info and alias list.
    
    Returns:
        Dict with 'ok' and 'data' fields containing user info.
    """
    return _run_cli(["+me"])


# Convenience function for AI callers
def mail_send(
    to: Union[str, List[str]],
    subject: str,
    body: str,
    cc: Optional[Union[str, List[str]]] = None,
    bcc: Optional[Union[str, List[str]]] = None
) -> Dict[str, Any]:
    """
    Simple send function optimized for AI callers.
    
    This is a simplified wrapper around send_email() for easy AI integration.
    
    Args:
        to: Recipient email address(es).
        subject: Email subject.
        body: Email body (HTML supported).
        cc: Optional CC recipient(s).
        bcc: Optional BCC recipient(s).
        
    Returns:
        Result dict with 'ok' boolean and 'data' or 'error'.
        
    Example:
        result = mail_send(
            to="[email protected]",
            subject="Hello",
            body="<p>Hi there!</p>"
        )
        if result.get("ok"):
            print("Email sent successfully!")
        else:
            print(f"Failed: {result}")
    """
    try:
        return send_email(
            to=to,
            subject=subject,
            body=body,
            cc=cc,
            bcc=bcc,
            auto_confirm=True
        )
    except Exception as e:
        return {"ok": False, "error": str(e)}


if __name__ == "__main__":
    # Demo usage
    import sys
    
    if len(sys.argv) < 4:
        print("Usage: python agently_mail.py <to> <subject> <body>")
        print("Example: python agently_mail.py [email protected] 'Hello' '<p>Hi!</p>'")
        sys.exit(1)
    
    result = mail_send(
        to=sys.argv[1],
        subject=sys.argv[2],
        body=sys.argv[3]
    )
    
    print(json.dumps(result, indent=2, ensure_ascii=False))

 

# Agently Mail Python API

Python 封装的 Agent Mail 发信 API,可直接被 AI 调用。

## 快速开始

```python
from agently_mail import mail_send, send_email, list_messages, read_message, search_messages

# 简单发信(推荐 AI 调用)
result = mail_send(
    to="[email protected]",
    subject="Hello",
    body="<p>这是一封测试邮件。</p>"
)

if result.get("ok"):
    print("发送成功!")
else:
    print(f"发送失败: {result}")
```

## API 函数

### `mail_send()` - 简单发信(AI 调用推荐)

```python
result = mail_send(
    to="[email protected]",           # 收件人(字符串或列表)
    subject="邮件主题",               # 主题
    body="<p>邮件正文</p>",           # 正文(支持 HTML)
    cc="[email protected]",           # 抄送(可选)
    bcc="[email protected]"         # 密送(可选)
)
```

### `send_email()` - 完整发信

```python
result = send_email(
    to=["[email protected]", "[email protected]"],
    subject="会议通知",
    body="<p>各位好,</p><p>明天 10 点开会。</p>",
    cc=["[email protected]"],
    attachments=["./report.pdf"],    # 附件
    auto_confirm=True                # 自动确认发送
)
```

### `list_messages()` - 列出邮件

```python
result = list_messages(limit=10, unread_only=True)
```

### `read_message()` - 读取邮件

```python
result = read_message("msg_xxxxx")
```

### `search_messages()` - 搜索邮件

```python
result = search_messages("关键词", limit=10)
```

### `reply_to_message()` - 回复邮件

```python
result = reply_to_message("msg_xxxxx", "收到,谢谢!")
```

### `forward_message()` - 转发邮件

```python
result = forward_message("msg_xxxxx", to="[email protected]")
```

### `get_user_info()` - 获取用户信息

```python
result = get_user_info()
# 返回邮箱地址、配额、权限等信息
```

## 命令行使用

```bash
python agently_mail.py [email protected] "主题" "<p>正文</p>"
```

## 返回格式

所有函数返回统一格式:

```python
{
    "ok": True,          # 是否成功
    "data": { ... }      # 返回数据
}
```

失败时:

```python
{
    "ok": False,
    "error": "错误信息"
}
```

## 依赖

- Python 3.6+
- agently-cli(已安装并授权)

 

提示词

  📁 文件结构

  ```
  agent-mail-guide/
  ├── README.md                    # 主文档(安装指南 + 目录)
  ├── install.sh                   # 一键安装脚本
  ├── agent_mail_api.py            # Python API 封装(完整)
  ├── agent_prompt_template.md     # Agent 提示词模板
  └── examples.py                  # 使用示例代码
  ```

  📦 内容概览

  1. CLI 安装指南 (README.md + install.sh)

    • 前置要求检查
    • 四步安装流程
    • 常用命令速查表

  2. Python API 封装 (agent_mail_api.py)

    • AgentMailAPI 类:完整封装所有 CLI 操作
    • 类型安全:使用 Enum 和 dataclass
    • 错误处理:自定义异常类,根据 exit code 分类处理
    • 两阶段确认:自动管理 confirmation_token
    • 便捷函数:quick_send(), quick_search()

  3. Agent 提示词模板 (agent_prompt_template.md)

    • 完整系统提示词:可直接用于 Agent 系统提示
    • 场景化片段:搜索、发送、回复、下载等场景
    • Python 集成提示词:API 使用说明
    • 快速集成模板:最小集成 + 完整集成
    • 常见问题处理:FAQ 格式

  🚀 快速使用

  ```bash
  # 安装
  cd agent-mail-guide
  bash install.sh

  # 授权
  agently-cli auth login

  # Python 使用
  python examples.py
  ```

  所有文档已整理完成,可直接用于其他 Agent 集成!

 

 

华为云AI Shell体验:免费4核7G云服务器,附自动保活脚本

2026-06-26 08:40:38

华为云AI Shell体验:免费4核7G云服务器,附自动保活脚本

最近腾讯推出了 Agent Mail,原本打算体验一番。不过考虑到需要本地运行 Agent,多少还是有点折腾。

如果你只是想体验 AI Agent 在终端中的能力,其实华为云还有一个容易被忽略的产品:AI Shell。

无需本地部署,打开浏览器即可使用,体验相当不错。

更多内容:华为云 / 免费云服务器

 

官网地址

https://developer.huaweicloud.com/aishell.html

 

简单介绍

云端作业环境一键拉起,开箱即用 一键快速拉起专属云端作业环境,预置AI CLI、精选华为云资源管理最佳实践等技能,无需复杂配置,开箱即用。容器运行环境免费使用,搭载多款预置大模型,轻松开展各类云上作业。

AI Shell 本质上就是一个集成 AI 能力的 Web Shell

打开浏览器即可获得一台云端 Linux,无需安装任何环境,同时还内置了 AI CLI 和华为云 Skills。

你可以直接通过自然语言让 AI 帮你执行 Shell 命令,也可以退出 AI Chat,当成一台普通 Linux 使用。

这里华为云深度集成了自家的Skills(skills.huaweicloud.com)

 

使用限制

每个账户同时可打开 3 个 Shell(相当于同时拥有 3 台临时云端 Linux服务器)。

每个 Shell 默认有效期 6 小时,到期前可点击 延期 按钮继续使用,否则容器会自动销毁。

 

机器配置

4核心 + 7G内存 + 130G磁盘 + Huawei Cloud EulerOS 2.0 系统 + 北京数据中心

----------------------------------------------------------------------
 CPU Model          : CPU model not detected
 CPU Cores          : 4 @ 2900.0000 MHz
 AES-NI             : ✓ Enabled
 VM-x/AMD-V         : ✗ Disabled
 Total Disk         : 136.1 GB (8.6 GB Used)
 Total RAM          : 7.2 GB (990.6 MB Used)
 System Uptime      : 3 days, 5 hour 9 min
 Load Average       : 0.22, 0.20, 0.18
 OS                 : Huawei Cloud EulerOS 2.0 (aarch64)
 Arch               : aarch64 (64 Bit)
 Kernel             : 5.10.0-182.0.0.95.r3353_273.hce2.aarch64
 TCP Congestion Ctrl: cubic
 Virtualization     : DOCKER
 IPv4/IPv6          : ✓ Online / ✗ Offline
 Organization       : AS55990 Huawei Cloud Service data center
 Location           : Beijing / CN
 Region             : Beijing
----------------------------------------------------------------------
 I/O Speed(1st run) : 187 MB/s
 I/O Speed(2nd run) : 156 MB/s
 I/O Speed(3rd run) : 156 MB/s
 I/O Speed(average) : 166.3 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency     
 Speedtest.net    47.75 Mbps        47.82 Mbps          4.68 ms     
 Los Angeles, US  47.77 Mbps        47.60 Mbps          186.09 ms   
 Dallas, US       47.79 Mbps        0.48 Mbps           208.01 ms   
 Montreal, CA     47.79 Mbps        0.98 Mbps           242.41 ms   
 Paris, FR        47.76 Mbps        46.06 Mbps          259.33 ms   
 Amsterdam, NL    47.80 Mbps        1.71 Mbps           288.57 ms   
 Suzhou, CN       Test failed       
 Ningbo, CN       Test failed       
 Hong Kong, CN    2.61 Mbps         9.74 Mbps           45.44 ms    
 Singapore, SG    15.29 Mbps        50.64 Mbps          180.75 ms   
 Taipei, CN       47.77 Mbps        14.63 Mbps          165.67 ms   
 Tokyo, JP        1.58 Mbps         49.88 Mbps          222.86 ms   
----------------------------------------------------------------------
 Finished in        : 7 min 44 sec
 Timestamp          : 2026-06-25 22:43:07 CST
----------------------------------------------------------------------

 

核心步骤

1、首次打开 Shell

首次进入 AI Shell 时,默认会进入 AI Chat 模式。你可以直接通过自然语言与 AI 对话,让它在 Shell 中执行相应的命令,无需手动输入复杂的终端指令。

 

2、切换到普通 Shell

如果不想使用 AI Chat,只需连续按 两次 Ctrl + C 即可退出聊天模式,返回到普通的 Shell 界面。之后就可以像使用普通 Linux 终端一样,自由执行各种命令。

 

如何保活

下面是一段可用于【篡改猴】的脚本,每2小时自动点击延期按钮。

// ==UserScript==
// @name         Refresh Auto Click
// @namespace    https://51.ruyo.net
// @version      1.0
// @description  每2小时自动执行一次点击
// @author       malaohu
// @match        https://devstation.connect.huaweicloud.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // 执行点击
    function autoClick() {
        console.log("[AutoClick] " + new Date().toLocaleString() + " 开始执行...");

        const el = document.getElementsByClassName("bottom-content")[0]?.childNodes[1];

        if (el) {
            el.click();
            console.log("[AutoClick] 点击成功");
        } else {
            console.log("[AutoClick] 未找到目标元素");
        }
    }

    // 页面加载完成后等待12秒执行第一次
    window.addEventListener('load', () => {
        setTimeout(() => {
            autoClick();

            // 之后每2小时执行一次
            setInterval(autoClick, 2 * 60 * 60 * 1000);

        }, 12000);
    });

})();

 

 

篡改猴?

应该有不少童鞋第一次用Tampermonkey(篡改猴),其实我就是第一次用。简单快速介绍步骤。

1,安装扩展程序,地址:https://u1.cm/ENWSY3

2,如果该扩展没被启动?访问 chrome://extensions/ 启用下

3,篡改猴扩展 - 右键 - 管理扩展程序 - 允许运行用户脚本 - 开启

4,篡改猴扩展 - 鼠标单击 - 添加新脚本

5,粘贴上面的脚本即可,记得启用该脚本

6,刷新一下AI Shell 的界面(必须是页面重新加载)即可触发自动脚本

 

最后总结

如果你想体验 AI + Terminal,但又不想折腾本地环境,那么华为云 AI Shell 确实是一个不错的选择。

相比需要本地部署的方案,它真正做到了开箱即用:打开浏览器就是一台 Linux,AI Chat、Shell、Skills 都已经准备好了。对于临时开发、运维排障、脚本测试甚至学习 Linux,都非常方便。

另外,本文也分享了一个简单的 Tampermonkey 保活脚本,可以自动帮你点击延期按钮,避免频繁手动续期。

感兴趣的话,不妨亲自体验一下,也欢迎在评论区分享你的使用感受。

 

Wasmer免费云部署:支持GitHub一键部署,可绑自定义域名

2026-06-25 08:40:03

Wasmer 是一个上手简单、部署便捷的云应用托管平台,支持 GitHub 一键部署、文件上传部署以及多种官方模板快速创建项目。

免费版提供 3 个应用、100GB+ 级别的月度资源额度以及自定义域名功能,对于个人开发者、学生和技术爱好者来说已经足够用于学习、测试和项目演示。

 

官方地址

https://wasmer.io/signup

账号注册支持Google账号 和 Github直接授权登录!该平台可不登录直接部署,不登录的话部署的站点仅1小时有效。

 

免费套餐

免费版本:Hobby - free

项目 免费额度
月费 免费
成员数 1 人
应用数量 3 个
请求数(Requests) 100,000 次/月
带宽流量 150 GB/月
Compute Hours 100 小时
Active CPU Hours 50 小时
存储空间 1 GB
数据库 每个 App 1 个数据库,总计 100 MB
自定义域名 50 个
Build Minutes 500 分钟
CDN 全球 Edge Network
SSL 免费自动配置
日志保留 1 天
支持 Community Support

 

部署步骤

1,注册登录平台后,访问地址:https://wasmer.io/new

2,可以选择上传文件夹;也支持直接Github授权部署;也可以选择模板部署支持WP,Flask等等;

3,可设置打包编译方式等

 

4,部署成功了!

 

5,访问Domains,添加要绑定的域名。按要求添加解析即可!

 

演示地址

ruyonet.wasmer.app

wordpress-7311c.wasmer.app

绑定域名:wasmer.ruyonet.kdns.fr

 

动态语言

目前Wasmer 的运行时环境几乎支持所有其他编程语言

  • Rust
  • Python
  • JavaScript
  • Go
  • PHP
  • Ruby
  • C / C++
  • .NET

 

最后总结

不过需要注意的是,免费套餐在计算资源、存储空间以及日志保留时间方面存在一定限制,更适合用于开发测试、个人展示和功能验证,不建议直接承载高并发或生产级业务。