opencode试用体验报告

缘由

最近ai发展比较快,我认为可以把陪伴型人工智能的开发列入日程了,但我的确不会前端。正在此时,vibe coding这个概念被炒得火热,于是我决定试一试。

准备工作

使用npx create-next-app为opencode提供了展示自己的舞台,大模型api使用的是deepseek。默认选项下,项目创建出来就带了CLAUDE.me和AGENTS.md,看来框架的开发者也是选择拥抱vibe coding的。

opencode的安装

官网,我们可以找到安装脚本: curl -fsSL https://opencode.ai/install | bash 。如果你的网络足够好,直接运行即可,但脚本本身是要下载二进制文件,链接地址在github上,在我所处的区域,链接并不稳定,因此,我们可以手动下载到本地,再使用–binary参数,从本地安装。

特别提醒:基于alpine的系统,需要使用musl后缀的二进制文件。

体验流程

在项目路径下,运行opencode,先询问它是否了解自己要做什么,如果它回答正确,说明AGENTS.md已经被正确读取,告诉它开始工作即可。右侧会有todo列表,进度比较直观。

感受

我的任务要求比较简单,第一次运行就已经差不多了,查看前端地址确认,把有问题的地方描述给它,它会自动修复。

整体来讲,代码质量还不错,每一次修正后都能正常运行,不存在error级的报错。

一些坑

坑:opencode在运行npm run dev & 之后,无法继续任务。

建议:在AGENTS.md中禁止,用户手动运行。

坑:next+react默认是后端渲染,console.log的输出在终端,不在浏览器控制台。

建议:使用页面可见的计数器、变量等方式确认是否存在触发器bug。

坑:后端渲染与前端渲染不同,弹窗等组件需要从后端加载,cors错误会导致无法弹窗。

建议:对于不了解的技术栈,不要忽略任何一个报错,即使在以前(vue)它并不影响运行效果。

Remmina 无法通过tls连接服务器

今天遇到一个很奇怪的问题,我在本地装了一台win10的虚拟机,可以直接通过快速链接栏链接rdp,但服务器不可以,报错,不知为何。甚至那台win10的虚拟机可以正常连接服务器。

快速链接栏

搜索了很多,最后在stackoverflow上看见一个回答[1]说是把高级里的negotiation改成TLS,试了试,并不行,于是抱着死马当活马医的态度,又试了试其它的选项,修改为RDP,很顺利的连上了。

就结果来讲,我推测是系统版本的原因,服务器是windows server,比较旧,虚拟机的RDP是官方的,肯定做了兼容,这样就解释通了

node调取打印机dll输出乱码

背景介绍

最近公司接了一个景区的项目,好巧不巧的分给我一个打票的功能。

过程

这有什么难的呀?

客户有一个一直在运行的系统,我去看了看,就是做一个网页然后预览,调用系统打印。

我求你当个人吧

客户提了一个需求,点击打印直接打印,不要什么预览确认,还要一定要B-S程序,也就是说只能使用IE的ActiveX调用dll。

这个时候我们的讨论结果是:没问题,框架支持IE,我可以用ActiveX开发。

我可求你当个人吧x2

是的你们没有猜错,现代框架哪还有兼容IE ActiveX的。只能用node在本地跑一个websocket server,于是只能重写了,因为涉及到一些高度的计算方法,要重写还挺麻烦的,我采用了一个取巧的方法:node直接接收指令打印,算法依旧在web端完成。

问题出现了

dll提供的似乎是按照GBK进行的解码,所以打印出来全是乱码,也就是说我们要转换一下编码再发送给打印机。

解决方案

iconv库,可以将已知编码转换为另一种编码,此处将UTF-8转换为GBK

年终总结-ver.2020

仅作为个人进行以下总结


- 确立第一个一年计划
- -  考过初级职称【程序员】
- -  小说能一天500字稳定更新
- - 英语口语能够正常交流
- 确定未来发展方向:独立游戏一体机

今年的成果

  • 立项:ECFramework
  • 立项:Lite-erp –> 转移至mongo
  • 完成:Wordpress — 微信 同步插件
  • 完成:主站页面更新,拆分
  • 完成:Gitlab/Openproject 内网穿透部署
  • 完成:整站HTTPS

MySQL localhost禁止访问

遇到这个问题先确认是否创建了账户


use mysql;
select Host,User from user;

我遇到这个问题是在Centos+Mysql 5.6

我创建了一个example_user@%的账户,但使用mysql -u example_user -h 127.0.0.1 -p无法登录,返回信息显示 Access denied for user ‘example_user’@localhost ,我就一直觉得很奇怪,我用的host明明是127.0.0.1,为什么变成localhost了,而且%应该是匹配所有host才对。

后来经过多次测试,发现在这种环境下,127.0.0.1会被识别为localhost,而且%并不会匹配到localhost,因此,我们只需要创建localhost作为host的账户即可


grant all on example_db.* on "example_user"@"localhost" identified by "your password";
flush privileges;

如何远程连接wamp环境下的MySQL

开放端口会导致安全问题,因此,请保证只用于debug或开发环境

相信各位都知道,MySQL远程访问需要新建账户,例如


grant all on example_db.* on "example_user"@"%" identified by "your password";
flush privileges;

所以导致无法访问的罪魁祸首不是mysql,是windows防火墙,我们需要使用下列操作步骤来开放3306端口。

搜索->防火墙->高级安全 Windows Defender 防火墙->入站规则

新建规则->端口->放行3306

使用脚本生成jekyll模板


#!/bin/bash

filename=$(date +"%Y-%m-%d")
header="---\n"
header=$header"layout: post\n"
if [[ $1 ]]
then
    header=$header"title: \""$1"\"\n"
    filename=$filename"-"${1// /-}
else
    header=$header"title:\n"
fi
header=$header"date: "$(date +"%Y-%m-%d %H:%M:%S %:z")"\n"
header=$header"categories: \n- CS\n"
header=$header"tags: \n- Computer Science\n"
header=$header"---"
if [[ $1 ]]
then
    echo -e $header > $filename".markdown"
else
    echo -e $header""
fi

wordpress HTTPS修正

前文:迁移wordpress到HTTPS

前文提到,使用docker部署,因为前后https模式不同步(前面是https后面是http://ip:port)导致需要修改配置文件,所以我决定把wordpress从docker迁移出来,因为docker挂载目录的其实就是wordpress本体在的位置


server {
  listen  443;
  server_name wpdev.endercaster.lan;#记得改掉
 #SSL证书配置参照前文
  root /opt/wordpress;#记得改掉
  location / {
      try_files $uri $uri/ /index.php?$is_args$args; #这里需要注意一下,不要少打
      index index.php;
  }
  # 这里替换为:在设置->固定连接->改为任意一个非朴素型
  #location ~ ^/wp-json/ {
  #    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
  #}
  location ~ \.php$ {
        fastcgi_pass unix:/run/php/wp-test.sock;
        include fastcgi.conf;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

然后把前文中wp-config.php加的代码都删掉。

配置php-fpm,如果只有这一个项目,可以把上面的fastcgi_pass改掉,跳过这步


[wordpress]#从www改为wordpress
user = www-data
group = www-data
listen = /run/php/wp-test.sock
listen.mode = 0666


# 重启php-fpm
systemctl restart php7.2-fpm
#现在可以重新读取nginx配置文件了
nginx -t 
# 如果上面的输出是successful的话
systemctl reload nginx

然后登录查看工具->站点健康,看看有没有少一些依赖,给它装上。

至此,我的站点终于完美的迁移到https啦!

ElasticSearch 权限不足

可能性一、真的权限不足

这种情况需要使用chown/chmod来对文件夹赋权限,具体要看异常提示中写的是哪一个文件夹。

可能性二、文件目录有空格

这换个文件夹名就行了,大家都会。

可能性三、java版本原因

对,我遇到的就是这个原因,因为我是比较激进的那一派,所以开发环境一般会是我部署的时候最新的版本,比如,JAVA 14。。。这里其实没有什么太完美的解决方式,临时的解决方案是把JAVA_HOME换到ElasticSearch安装目录下的jdk目录。

最后提供一种能解决所有问题的方法:万能的docker镜像


sudo docker run -itd --name es -p 9200:9200 -p 9300:9300 elasticsearch:版本号

如果需要挂载数据卷的话,请参阅官方文档