生活-日常技巧积累

pepper 2022-04-10

这篇博客介绍了一些日常收集整理资料。

1 常见的日常积累小技巧

  1. mac 电脑外接显示屏 对于屏幕分辨率的问题,其中较好的一个仓库软件叫做 betterdisaplay,可以用来调整刷新赫兹以及分辨率,但是要注意下载符合mac的系统版本的软件;
https://github.com/waydabber/BetterDisplay/releases?page=6
  1. Adobe ps 免费激活版本 :link

  2. 绘图的时候图例位置参数设置

         # 紧凑型图例
         handles, labels = plt.gca().get_legend_handles_labels()
         plt.legend(handles[:35], labels[:35], loc='upper right', 
                   ncol=2, columnspacing=0.8, handletextpad=0.5)
            
         # 自动检测最佳位置
         # plt.legend(
         #     loc='best',
         #     bbox_to_anchor=(1, 0.5),  # 右侧垂直居中
         #     borderaxespad=0.5,
         #     framealpha=0.9
         # )
            
         # plt.legend(
         # loc='upper center',
         # bbox_to_anchor=(0.5, -0.15),  # 向下偏移15%
         # ncol=2,
         # frameon=True,
         # shadow=True,
         # fancybox=True
         # )
    
  3. google colab 时刻触发脚本

       function ConnectButton(){
           console.log("Connect pushed");
           document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click()
       }
       setInterval(ConnectButton,60000);
    

2 代码运行常见

1. 后台进程管理方案

  • 使用nohup持久运行

      nohup python -u run_script.py > script.log 2>&1 &
    
      # - 参数说明
      # nohup:忽略挂断信号
      #  -u(Python参数):禁用输出缓冲
      #  > script.log:标准输出重定向
      #  2>&1:错误输出合并
      #   &:后台运行 
    
  • 验证进程状态

    # 查看进程列表
    ps aux | grep "python run_script.py"
    # 实时监控日志
    tail -f script.log
    
  • 终止进程

    # 优雅终止
    pkill -f "python run_script.py"
    # 强制终止(无响应时)
    kill -9 1708
    
  • 高级管理方案(生产环境推荐), 使用systemd服务 创建服务文件。

    sudo nano /etc/systemd/model.service
    
  • 服务内容:

    [Unit]
    Description=Model Training Service
    [Service]
    User=root
    WorkingDirectory=/root/PDFormer
    ExecStart=/root/miniconda3/envs/base/bin/python run_script.py
    Restart=always
    StandardOutput=file:/var/log/model.log
    StandardError=file:/var/log/model_error.log
    [Install]
    WantedBy=multi-user.target
    
  • 启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable model
    sudo systemctl start model
    
    • 使用tmux会话管理
    # 安装tmux
    sudo apt install tmux -y
    
    # 创建会话
    tmux new -s model_train
    
    # 在会话中运行
    python run_script.py
    
    # 分离会话
    Ctrl+B → D
    
    # 重连会话
    tmux attach -t model_train
    
    # 打开现有会话
    tmux attach -t python_session
    

    2. Markdown常用快捷键

    Ctrl 0  Ctrl 6: 普通文本一级文本~六级文本
    Ctrl B: 加粗
    Ctrl I: 斜体
    Ctrl U: 下划线
    Shift Alt 5: 删除线
    Shift Ctrl ~: 行内代码块
    Ctrl K: 超链接
    Ctrl T: 表格
    Ctrl Shift Q: 引用
    Shift Ctrl I: 插入图片
    Shift Ctrl M: 公式块
    [ ]: 任务列表(可勾选的序列)
    <sup>内容</sup>: 上标
    <sub>内容</sub>: 下标
    :smile:: 😄
    [toc]: 展示目录
    Ctrl L: 选中一行
    Ctrl D: 选中内容/单词
    Ctrl Home: 跳转到文章开头
    Ctrl End: 跳转到文章结尾
    Ctrl F: 搜索
    Ctrl H: 替换
    

    3 学习资源

    1. 书籍资源

    ```java 主站: http://www.https.ng 镜像站点:

    • http://38.147.170.240:5959
    • http://103.74.192.62:1234
    • http://45.145.228.151
    • http://193.134.211.102:1234

    EPUB资源: http://38.147.170.240:5959/c1/baidupan/222222/其它/EPUB

4 trae 更换token的脚本

功能说明

通过浏览器控制台注入 Cookie,实现 Trae IDE Web 端的登录态切换(更换 token / session)。

使用方法

  1. 打开 Trae Web IDE 页面
  2. F12 打开浏览器开发者工具,切换到 Console 面板
  3. 粘贴下方脚本并回车执行
  4. 手动刷新页面(F5),检查是否登录成功

脚本

(function() {
    const cookies = [
        "sessionid=<YOUR_SESSION_ID>",
        "X-Cloudide-Session=<YOUR_CLOUDIDE_SESSION>",
        "passport_auth_status=<YOUR_AUTH_STATUS>",
        "sid_tt=<YOUR_SID_TT>",
        "uid_tt=<YOUR_UID_TT>",
        "ttwid=<YOUR_TTWID>"
    ];

    const domain = "; domain=.trae.cn; path=/; expires=Fri, 31 Dec 2026 23:59:59 GMT; SameSite=Lax";

    cookies.forEach(cookie => {
        document.cookie = cookie + domain;
    });

    console.log("✅ 注入尝试完成,请手动刷新页面查看结果。");
    console.warn("⚠️ 如果刷新后未登录,说明 HttpOnly 属性拦截了脚本注入,请使用 Application 面板手动添加。");
})();
字段 作用
sessionid 主会话标识,用于服务端校验登录态
X-Cloudide-Session Cloud IDE 专属会话令牌,关联云端工作区
passport_auth_status 认证状态标记,标识账号是否已完成验证
sid_tt 服务端 Session ID(与 sessionid 对应)
uid_tt 用户唯一标识(User ID)
ttwid 设备指纹 / 防伪令牌,含时间戳与签名

注意事项

  • HttpOnly 限制:部分 Cookie(如 sessionid)可能设置了 HttpOnly 属性,JavaScript 无法通过 document.cookie 写入。此时需改用开发者工具 Application → Cookies 面板手动逐条添加
  • 有效期:脚本中 expires 设为 2026-12-31,但实际有效期取决于服务端 session 过期策略,Cookie 注入成功不代表 session 仍有效
  • 域名匹配domain=.trae.cn 确保所有子域名共享该 Cookie;若目标页面域名不同需相应修改
  • 安全提醒:Cookie 中包含敏感凭据,请勿在公开环境分享或提交至版本控制

刷客脚本


(function() {
    // 适配学习公社:视频页路径匹配
    const isVideoPage = window.location.pathname.startsWith('/p/course/videorevision/');
    // 适配学习公社:课程页路径匹配
    const isCoursePage = window.location.pathname === '/p/uc/home';

    if (isVideoPage) {
        // 1. 防暂停:监听video,自动恢复
        setTimeout(() => {
            const video = document.querySelector('video');
            if (!video) return;
            video.addEventListener('pause', () => {
                video.play(); // 强制播放
                console.log('防暂停:已恢复播放');
            });
        }, 3000);

        // 2. 自动静音(适配学习公社静音按钮class,需现场确认)
        const autoMute = () => {
            setTimeout(() => {
                const muteBtn = document.querySelector('.video-mute-btn'); // 替换为实际class
                if (muteBtn) muteBtn.click();
            }, 2000);
        };

        // 3. 自动切课:检测进度100%,点击下一节
        setInterval(() => {
            // 替换为学习公社进度元素class
            const progressItems = document.querySelectorAll('.study-progress-item');
            if (progressItems.length === 0) return;

            // 当前进度
            const currentProgress = progressItems[0].innerText.trim();
            // 最后一个进度
            const lastProgress = progressItems[progressItems.length - 1].innerText.trim();

            // 全部完成:关闭页面
            if (lastProgress === '100%') {
                localStorage.setItem('videoDone', 'true');
                window.close();
                return;
            }

            // 当前完成:切下一节
            if (currentProgress === '100%') {
                for (let i = 1; i < progressItems.length; i++) {
                    if (progressItems[i].innerText.trim() !== '100%') {
                        progressItems[i].click();
                        console.log('切课:已点击下一节');
                        break;
                    }
                }
            }

            // 异常刷新
            const errorDialog = document.querySelector('.dialog-content');
            if (errorDialog && errorDialog.innerText.includes('学时异常')) {
                location.reload();
            }
        }, 5000);

        // 启动
        autoMute();
    }

    if (isCoursePage) {
        // 课程页:自动进入未完成课程
        const startLearn = () => {
            // 切换未完成标签(替换实际class)
            document.querySelector('.tab-unfinished').click();
            setTimeout(() => {
                // 点击第一个学习按钮(替换实际class)
                const learnBtn = document.querySelector('.start-learn-btn');
                if (learnBtn) learnBtn.click();
            }, 1000);
        };

        // 首次执行
        setTimeout(startLearn, 2000);
        // 循环检测
        setInterval(() => {
            if (localStorage.getItem('videoDone') === 'true') {
                location.reload();
            }
        }, 5000);
    }
})();