“起猛了,编程时听到有人阴阳我”

向量数据库NoSQL数据库云安全

picture.image

我想,我大抵是病了,

每天一想到要上班,

我的身体就像中了魔咒似的,

沉重得动弹不得。

拖延、倦怠、提不起劲,

似乎所有负面状态都在向我袭来,

内心深处仿佛在呐喊:

“要不今天就划水摸鱼算了?”

picture.image

可偏偏,这种自我放纵却让我更焦虑。既然现实中没人推我一把,那我就自己搞一个 VSCode “程序员毒舌伴侣” !在我浑身班味,只想躺平时,它能用自嘲式的黑色幽默帮我满血复活。

当我想放弃时,它会适时地提醒:“你看着空白屏幕发呆的样子,还挺有艺术感的。”

当我 p 人属性大爆发时,它会忍不住嘲讽:“打算拖到明年再写完这段代码吗?”

当我终于完成一个艰难的任务时,它也会阴阳怪气道:“恭喜你,离下一个 bug 又近了一步!”

如果你也像我一样时常需要一点推力,那就继续看下去吧,尝试用豆包MarsCode (https://sourl.cn/vLr9qi)来 DIY 一个能随时“骂醒”你的“程序员毒舌伴侣”!

“程序员毒舌伴侣”开发

1. 在开发“程序员毒舌伴侣”前,完成 Node.js 和 Yeoman 及 VSCode Extension Generator 的安装:


          
              

            npm install -g yo generator-code
          
        

2. 使用 Yeoman 生成一个 VSCode 插件模板,按照提示完成配置。建议类型选择 TypeScript。


          
              

            yo code
          
        

3. 在插件中安装 play-sound 库用于播放声音。


          
              

            npm install play-sound
          
        

4. 在项目根目录下创建 sounds 文件夹,用于存放需要播放的声音。

5. 打开 src/extension.ts 文件,我们需要在这里添加、修改代码。需要注意的是,代码中播放声音的文件名需要和第 4 步存放的声音文件一致。


            
import * as vscode from 'vscode';
            
import * as path from 'path';
            
import play from 'play-sound';
            

            
// 创建音频播放器
            
const player = play({});
            
// 设置时间限制
            
const TIME_LIMIT = 30 * 1000;
            
// 记录窗口是否聚焦
            
let isWindowFocused = true;
            
// 记录累计活动时间的变量
            
let accumulatedActiveTime = 0;
            

            
export function activate(context: vscode.ExtensionContext) {
            
  // 注册命令
            
  let disposable = vscode.commands.registerCommand('extension.checkProblems', () => {
            
    // 获取所有诊断信息
            
    const allDiagnostics = vscode.languages.getDiagnostics();
            

            
    // 统计问题数量
            
    let problemCount = 0;
            
    allDiagnostics.forEach(([_, diagnostics]) => {
            
      problemCount += diagnostics.length;
            
    });
            

            
    // 如果问题数量大于 0,播放警告声音
            
    if (problemCount > 0) {
            
      playSound('a.mp3');
            
    } else {
            
      playSound('b.mp3');
            
    }
            
  });
            

            
  context.subscriptions.push(disposable);
            

            
  // 监听文件创建事件
            
  vscode.workspace.onDidCreateFiles(() => {
            
    // console.log('检测到创建文件');
            
    playSound('c.mp3');
            
  });
            

            
  vscode.workspace.onWillDeleteFiles(() => {
            
    // console.log('检测到删除文件');
            
    playSound('d.mp3');
            
  });
            

            
  // 监听窗口焦点变化事件
            
  vscode.window.onDidChangeWindowState((event) => {
            
    isWindowFocused = event.focused;
            
  });
            
  
            
  setInterval(() => {
            
    if (isWindowFocused) {
            
      accumulatedActiveTime += 5000; // 累加活动时间
            
      console.log('累计活动时间:', accumulatedActiveTime / 1000, '秒');
            

            
    }
            
    if (accumulatedActiveTime >= TIME_LIMIT) {
            
      playSound('e.mp3');
            
      accumulatedActiveTime = 0; // 重置累计活动时间
            
    }
            
  }, 5000);
            

            
}
            

            
function getProblemCount(): number {
            
  const allDiagnostics = vscode.languages.getDiagnostics();
            
  let problemCount = 0;
            
  allDiagnostics.forEach(([_, diagnostics]) => {
            
    problemCount += diagnostics.length;
            
  });
            
  return problemCount;
            
}
            

            
function playSound(fileName: string) {
            
  const soundPath = path.join(__dirname, '..', 'sounds', fileName);
            
  player.play(soundPath, (err) => {
            
    if (err) {
            
      console.error(`无法播放声音: ${err}`);
            
    }
            
  });
            
}
            

            
export function deactivate() { }
            

        

当你遇到看不懂的代码时,可以询问豆包MarsCode AI 助手。

例如:

「 vscode.languages.getDiagnostics() 的目的是什么」,AI 会告诉你,是为了获取文件的诊断信息,如警告、错误等。

picture.image

如果想修改代码,也可以在编写注释后等待自动补全代码。

picture.image

6. 在项目根目录下创建 typings 文件夹,并在里面创建 play-sound.d.ts 文件,编写以下代码:


            
declare module 'play-sound' {
            
    interface PlayOptions {
            
      player?: string;
            
    }
            
  
            
    interface Player {
            
      play(fileName: string, callback?: (err?: Error) => void): void;
            
    }
            
  
            
    function play(options?: PlayOptions): Player;
            
  
            
    export = play;
            
  }
            
  
        

如果你不知道 play-sound.d.ts 文件的作用,同样可以询问豆包MarsCode AI 助手:

picture.image

7. package.json和tsconfig.json进行修改


            
//package.json文件
            
{
            
  "name": "extension-demo",
            
  "displayName": "extension_demo",
            
  "description": "",
            
  "version": "0.0.1",
            
  "engines": {
            
    "vscode": "^1.92.0"
            
  },
            
  "categories": [
            
    "Other"
            
  ],
            
  "activationEvents": [    
            
    "onCommand:extension.checkProblems",
            
    "*"
            
],
            
  "main": "./out/extension.js",
            
  "contributes": {
            
    "commands": [
            
      {
            
        "command": "extension-demo.helloWorld",
            
        "title": "Hello World"
            
      },{
            
        "command": "extension.checkProblems",
            
        "title": "Check Problems"
            
      }
            
    ]
            
  },
            
  "scripts": {
            
    "vscode:prepublish": "npm run compile",
            
    "compile": "tsc -p ./",
            
    "watch": "tsc -watch -p ./",
            
    "pretest": "npm run compile && npm run lint",
            
    "lint": "eslint src --ext ts",
            
    "test": "vscode-test"
            
  },
            
  "devDependencies": {
            
    "@types/mocha": "^10.0.7",
            
    "@types/node": "20.x",
            
    "@types/vscode": "^1.92.0",
            
    "@typescript-eslint/eslint-plugin": "^7.14.1",
            
    "@typescript-eslint/parser": "^7.11.0",
            
    "@vscode/test-cli": "^0.0.9",
            
    "@vscode/test-electron": "^2.4.0",
            
    "eslint": "^8.57.0",
            
    "typescript": "^5.4.5"
            
  },
            
  "dependencies": {
            
    "play-sound": "^1.1.6"
            
  }
            
}
            

            
//tsconfig.json文件
            
{
            
    "compilerOptions": {
            
        "module": "Node16",
            
        "target": "ES2022",
            
        "outDir": "out",
            
        "lib": [
            
            "ES2022"
            
        ],
            
        "sourceMap": true,
            
        "rootDir": "src",
            
        "strict": true,   /* enable all strict type-checking options */
            
        /* Additional Checks */
            
        // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
            
        // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
            
        // "noUnusedParameters": true,  /* Report errors on unused parameters. */
            
        "typeRoots": [
            
        "node_modules/@types",
            
        "typings"
            
        ]
            
    }
            
}
            

        

8. 完成之后就可以开始调试我们的“毒舌伴侣”:

点击上方的运行,选择「启动调试」,启动调试后,会自动打开一个 VSCode 窗口,我们随便选择一个本地项目打开。

picture.image

9. 打开项目后,可以随意尝试创建文件、删除文件以及持续编码30秒等工作,过程中就可以感受专属“程序员毒舌伴侣”对你的“冷嘲热讽”咯,它不仅能让你告别拖延,还会让你在与自己的对话中,找到一丝久违的动力。

picture.image

开发至此“毒舌伴侣” 第一版就完成了,称它为第一版,是因为它现在只支持在连续编码一段时间,以及创建文件、删除文件时鼓励你。

如果你还有别的 idea ,欢迎继续完善“程序员毒舌伴侣”,将创意投稿给我们的话,有惊喜哦!!

福利来咯!!

福利1: 关注豆包MarsCode 公众号,后台发送**“毒舌”** ,即可领取对应源码和音频素材

福利2: “评论+在看”本文,将在评论区抽取两位幸运用户赠送豆包MarsCode 周边礼品一份‍‍‍‍‍‍‍‍‍‍‍‍

往期精选

picture.image

有奖征集|人人都是豆包MarsCode 测评官!

picture.image

注意看,这届年轻人用豆包MarsCode 做暑期作业。

picture.image

如果我们的内容对您有帮助的话,

欢迎您点赞转发在看 哦⬇

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
KubeZoo: 轻量级 Kubernetes 多租户方案探索与实践
伴随云原生技术的发展,多个租户共享 Kubernetes 集群资源的业务需求应运而生,社区现有方案各有侧重,但是在海量小租户的场景下仍然存在改进空间。本次分享对现有多租户方案进行了总结和对比,然后提出一种基于协议转换的轻量级 Kubernetes 网关服务:KubeZoo,该方案能够显著降低多租户控制面带来的资源和运维成本,同时提供安全可靠的租户隔离性。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论