分类 未分类 下的文章

上次辞职的是谪仙人

谪仙人就是李白,你猜到了吗
李白四十岁左右到了长安,这个称号是贺知章给他起的。贺知章这时候年纪已经很大了,马上也要辞职:不过是告老还乡。他看了李白的文章惊为天人,给他送个外号:谪仙人,也就是被贬下凡间的神仙。李白诗仙的名号大概就是从这时候来的。贺知章告老还乡前给唐玄宗李隆基推荐了李白,李老板先是给他翰林院供奉的职位做着,主要就是做做文宣写写稿子。有一天李老板坐在沈香子亭里,忽然情绪来了,召集李白来应景谢谢文章,谁知道把李白弄过来,他喝多了还没醒。给凉水洗把脸弄清醒了,李白下笔成文,皇帝惊为天人。又有一次,李白又又又跟着皇上喝多了,结果让高力士给子脱鞋。高力士哪受得了这个,后来就通过杨贵妃说李白坏话。后来李老板要给李白升个官,杨贵妃就给拦着。李白也生气,就辞官了。隆基老板还是豪爽,给了好些金子。辞官离开长安这期间,写了《东武吟》,一是用诗赠别好友,二是纪念在皇帝身边这些个日子,三是感叹世事无常,人情冷暖。想着自己能力了得,不输世间英雄豪杰,如今却只能学古人归隐山林。
写这个话题,是想现在爆火的大厂离职文学,腾讯阿里华为字节,进得了大厂自然各个身手了得。一朝离职,一时爽快,后话如何,未来怎样?没有人知道。网上各位吃瓜群众自然是看个热闹,借他人离职宣泄自己的情绪,大概也不会关心后来会怎样。然而太阳底下无新事,大厂离职这些桥段,历史上也必然一次次发生过。与其一时宣泄情绪,不如看看历史。说严肃点儿是以史为鉴,说轻松点儿是找点故事读读,说功利点儿是还能学点老祖宗的知识,享受一点文章诗词的熏陶,岂不是比天天上滑这些看过就忘的笔记帖子要好?至少这历史其中多是真的,那网上说自己如何如何,真真假假还不知怎么分辨呢。
附新唐书李白辞官相关情节。
天宝初...故白亦至长安。往见贺知章,知章见其文,叹曰:“子,谪仙人也!”言于玄宗,召见金銮殿,论当世事,奏颂一篇。帝赐食,亲为调羹,有诏供奉翰林。白犹与饮徒醉于市。帝坐沈香子亭,意有所感,欲得白为乐章,召入,而白已醉,左右以水颒面,稍解,授笔成文,婉丽精切,无留思。帝爱其才,数宴见。白尝侍帝,醉,使高力士脱靴。力士素贵,耻之,擿其诗以激杨贵妃,帝欲官白,妃辄沮止。白自知不为亲近所容,益骜放不自修......恳求还山,帝赐金放还。

职场不开心,竟然被老板娘排挤,从顶级大厂离职,准备回乡下隐居!
没照片!没照片!没照片!
老板姓李,国内顶级大厂!辞职不干了!注意,厂子绝对是顶级中的顶级,我不说,用小拇指都能猜到!不是吹,我文字功底特别好,我有个老大哥姓贺,夸我些文章写得好,跟神仙下凡一样!贺大哥在李老板的厂里多年,就跟李老板推荐我去给他写文章,我就这么老板直接面试进厂了!文章好大家就愿意看,给厂子外面的人讲讲我厂的好事说说李老板的好话,厂子的经营业绩大大提高,老板当然也特别高兴啊!我到了厂子在文宣部,时不时和老板一起喝酒。有一次喝多了,就有些狂了,让老板的高秘书帮我脱鞋。高秘书天天伺候老板家,就感觉我在侮辱他,哪知道我只是喝多了!结果听人说高秘书私下里给老板娘打小报告,老板要给我升职老板娘就挡着不让!我向来性格直,受不了这些气,不让我干我还就不干了!跟李老板辞职了,老板发了笔钱给我。今天就跟几个要好的兄弟姐妹告别了,回乡下隐居去了!最后写篇文章,在这儿发个帖纪念一下。文章就叫《东武吟》吧。
还没猜出来什么厂?唐厂!
以上参考《新唐书》卷二百二列传第一百二十七。评论区猜猜是谁😁😁😁

体验了宁联眼科的雾视屏2天. 说下体验.
先说下原理和结构. 远视屏有一个Android手机,1个屏幕灯, 两个摄像头,一个主体结构组成.
主体结构有点像一个17寸的显示器,上部放屏幕灯和两个摄像头.摄像头一个对人, 一个对桌面. 主体结构内部是一对拉远镜, 内部下侧放着安卓手机, 屏幕感觉在5~6寸. 屏幕灯的开关是独立的. 主体结构右侧有音量加减/信号切换/亮度/开关键. 后侧有1个hdmi,2个USB-A口, 1个type-c电源口. 电源是最大输出12V 3A.
功能上, 可从HDMI输入显示, 也可以切换内部安卓系统显示(通过信号切换键), 内嵌了一些护眼应用和学习应用.
主要原理就是把安卓屏通过拉远镜拉远.
拉远镜中的图形有一些畸变. 像是看投影在球体内侧的图像一样.
长期使用有些头晕的感觉.
拉远镜中的虚像应该是比较远, 是不是平行光不太清楚.感觉好像很大, 但用相机靠近主体结构同时拍虚像和原安卓屏幕, 发现大小竟然是一样的.
但是距离主体结构不同的距离, 在相机中所占的比例是相同的, 而不是像正常景物,随着距离增大而变小. 也就是虚像的视角大小几乎不变.
个人感觉是顾此失彼. 这个屏幕视角宽度, 只有我看我14寸笔记本的1/3大. 小点的字根本看不清. 比如用ps或blender中都有很多小字体,没法看. 也即是虽然睫状肌放松了,但看起来却费力了.

原文链接
十大趋势:发疯文学,精神远方,游戏人间, 审慎消费, 玄学药方, 悦己, 新型陪伴, 热衷标签, 小众运动, 慢生活.
这些趋势似乎描述了这样的人: 心情压抑苦闷, 生活忙碌单调, 努力换不回好的回报, 命运无常, 经济拮据, 孤独无助, 无人倾诉, 向往更好的生活体验, 对未来不再抱有幻想, 将目光从幻想中美好的未来收回到当下可以立即获得的新鲜快乐.

小程序端支持css动画. 虽然应用了@keyframes会报一条警告, 但事实上又可以使用

/* 定义动画 */
@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
/* 应用于特定元素,例如类名为 spin-element 的元素 */
.spin-element {
  display: inline-block;
  /* 设置旋转的中心点 */
  transform-origin: center;

  /* 应用动画 */
  animation: spin 2s linear infinite; /* 动画名称、持续时间、动画曲线、无限循环 */
}

今天很奇怪typecho后台进不去了, admin页面显示不正确,也无法登录.
只好升级.typecho现在有2个网站, 一个是https://typecho.org/,这个肯定是官网, 另一个是https://typecho.work/,不知道和官方有没有关系.
先从阿里云后台备份了数据库, 又按官方说明, 通过ftp删除旧文件和复制新文件. 然后加载网站出现500错误. 看了下typecho要求php版本是7.2, 我用的还是5.3, 应该之前是1.1版本吧? 做了升级后就正常了. 登录admin后又通过typecho后台做了备份和升级,一切正常!

5.0的时候就学过一下,不怎么用,现在8.0又忘记了,重学一遍
参考视频:
https://www.bilibili.com/video/BV12J411z7j7/?spm_id_from=333.337.search-card.all.click&vd_source=a24e9520e198932372f0c014624cafa4

原理图绘制

1. 新建工程-点击原理图-新建原理图

2. 修改页面设置,设置日期/修订/标题

3. 操作:鼠标悬浮在对应器件上,多数情况不需要选中就可以操作, 但如果选中了, 则优先操作选中的对象

快捷键 助记词 操作
A Add 增加器件
P Power 增加电源类器件,包括符号和标记
W Wire 连线. 单击终点停止这一段线. 双击在任意位置停止
L Label 增加标签
V VALUE 设置器件值.也可以双击
E Edit 编辑器件的符号属性
R Rotate 旋转器件
M Move 移动,不会带着线走
G draG 拖动,会带着线走. 没连线的时候G和M作用是一样的
Del - 线是删除
X X-axis 线是删除,器件是X方向左右翻转
Y Y-axis Y方向上下翻转
Ctrl-C/V - 复制粘贴
Ctrl+左键 - 反选
Shift+左键 - 增加选择

有些功能在老版本上有,新版本已经停用了. 比如: C可以直接复制;选中后Shift+左键拖动可以复制.
新版本自动给器件编号, 老版本需要手动用"批注"工具编号.
新老版本的图标也有很大变化.

原理图图标功能 8.0样式 旧样式
批注原理图 灰红蓝色, R??->R42 黄色,笔记本上一支笔
ERC电气检查 三个复选框,红圈√ 一致瓢虫
符号字段表 灰色表头表格 蓝色表头表格

4. ERC检查

5. 选择封装(footprint)

按旧版本和新版本都支持符号字段表手动选择封装. 但新版本增加了"分配封装"工具(图标是一个贴片IC+一个放大器+红圈锁链),可以快速筛选. 不确定的时候,右键调出封装图, 封装图上点击3D封装可以看实物3D图

6. 从原理图更新PCB, 按F8或者从菜单选择

此时会自动新建PCB, 运行检查, 放置到新的PCB图上去

PCB绘制

1. 绘制原点. 点击原点图标.

点击后点右键可以修改坐标间隔为1mm. 后面多数绘图工具点击后都可以右键选择网格的间隔.

PCB图标功能 8.0样式 旧样式
原点 4x4点, 蓝色十字线 4x4点,一个红点
绘制线 一条斜线 三条连续蓝线4个绿色节点
电路图设置 绿色电路板+红色齿轮 绿色电路板+灰色齿轮
标尺寸 斜的标尺 横向标尺有个N字
填充区域 蓝色台阶区域黑色铜线 绿色方块区域灰色铜线

2. 绘制切边边框. 点击Cut.Edges图层, 点击绘制线

3. 绘制电路边界. 点击Margin图层, 点击绘制线. Margin距离Cut.Edge一般0.3mm.此时

快捷键多数和原理图类似, 相同的就不再赘述了
快捷键|助记词|操作
--|--|--
Home|-| 查看整个Cut.Edge框
Ctrl-Home|-|查看所有框和器件
6|-|布置差分线
x|-|普通布线,左上角下拉菜单调整布线宽度
x-/|-|布线时候调整布线方向
x-v|Via hole|过孔
v|View|切换活动层
选中线-左键拖动|-|调整线的位置
选中线-D|Drag|调整线的位置
选中线-G|-|调整节点的位置
选中线-U|-|选择相连线段
B|-|填充覆铜区
Ctrl-B|-|取消覆铜区填充

4. 放置器件

M Move移动的时候,可以用方向键精确移动
E Edit可以直接编辑器件坐标
R Rotate旋转

5. 电路板设置

设计规则: 最小布线宽度: 0.15mm
网络类表: 间隙: 0.15mm, 布线宽度0.25mm, 过孔外径0.7mm内径0.4mm, 差分线宽0.28mm间距0.15mm
预设尺寸(导线和过孔): 布线宽度0.2/0.35/0.5/0.6/0.8/1/1.5/2mm, 过孔0.7:0.4/0.8:0.5/0.9:0.6/1.0:0.7mm, 差分对布线0.28:0.152mm
阻焊和锡膏: 阻焊间隙0.05mm, 阻焊(绿油)桥宽: 0.1mm,

6. 连线过孔

6(差分布线)-右键选择尺寸-布成对的线
X 布线

地线GND先不布

7. 标尺寸,选择丝印层或User.Eco1层, 点击标尺图标, 标明PCB Edge.Cut尺寸

8. 铺地(覆铜).

选择F.Cu层, 点击填充区域图标, 点击PCB左上角, 弹出对话框:
网络: GND, 名称:GND, 拐角平滑: 圆角1mm, 电气间隙:1mm, 最小宽度:0.254mm,焊盘: 缓释热焊盘 间隙0.508,散热引线宽度 0.508.
点选整个电路板, 闭合后按"B"键填充覆铜
覆铜区角落右键-覆铜-覆铜到其他区域-选B.Cu层,给背面覆铜. 确定后需要再点"B "
按"Ctrl+B"取消覆铜

9. DRC检查

10. 丝印

在F.SilkS/B.SilkS上添加文字

11. 3D检查

Alt+3 进入3D视图. 按X/Y/Z检查各个面, Shift+X/Y/Z检查各个背面.

12. 出位号图

点击打印, 选择:

  • 钢网层F/B.Paste (需要贴片的层)
  • 丝印层F.SilkS
  • 掩码层F.Masks
  • PCB边框层Edge.Cuts
  • 原件边框层F.CountYard
  • 自定义层
    选择自适应页面(适合图框)
    打印预览并输出PDF. 位号图是给工厂工人用于校准位号是否和BOM一致.

13. 出Gerber图

  • 选择F/B的Paste/SilkScreen/Mask,和Edge.Cuts.
  • 勾选绘制封装值,绘制封装文本(参考), 从其它层排除PCB边框层, 从丝印中排除焊盘, 使用Protel扩展名, 剔除阻焊开窗中的丝印(从丝印中减去阻焊).其他不勾选.
  • 根据情况勾选不允许过孔盖油
  • 点击绘制

    14. 出钻孔文件

  • 点击生成钻孔文件
  • 钻孔单位选择毫米.
  • 格式选择Gerber或者Postscript都可以.
  • 关闭钻孔文件生成对话框和Gerber对话框

    15. 出位号坐标图(元件放置文件)

  • 点击文件->制造输出->元件放置文件
  • 输出目录还是gerber
  • 编码ascii,单位mm, 文件选择独立的电路板文件
  • 点击生成

    16.检查生成的文件(11个). 可以看到所有的文件都是文本文档

    17. 生成BOM文件

    原理图-点击BOM图标(BOM+红色上箭头),点击导出

    18. 做生产文件

  • 标注阻抗匹配
  • 标注板厚
  • 标注元件焊接先后顺序

教师要让学生时刻保持兴趣和思考。保持兴趣是让学生持续分泌多巴胺,保持对教学的粘性;保持思考是让学生吸收教学内容,不能只是听到,还要听懂。
所以有些老师上课习惯性的停顿,或者说一句话中间总是加长长的空格,就是让学生去猜想下来说什么,抑或用安静来提醒学生保持注意。
不过如果讲得内容没有吸引力,还是不能阻止学生神游天外的。

咱们国家英语教学历史悠久, 恢复高考后, 英语也很快进入了初中课本, 也就是说从那个时候开始,完成9年义务教育的人都学过英语, 之后英语教学内容之多不少, 现如今小学生英语必修, 学前的爸爸妈妈也给报班学习, 然而到2024年的今天, 从外国博主中国旅游的视频能看出, 能流利说英语的人依然非常少, 能磕磕绊绊交流的都不多. 我一直对此感到奇怪, 不知道是英语教育太失败还是英语太难? 在国家双减以前, 有一大批的英语教学机构并因此上市. 双减后这个需求不可能就一下消失, 需求肯定会是持续存在的, 只是转成非盈利了.
继续学了一段时间的英语, 我发现了原因. 英语其实是最符合一万小时法则的学科了, 其实没有难度, 方法对了, 时间磨够了就行了. 我们英语学不好, 一个是方法不对, 二是时间太欠缺. 英语听说读写, 说最重要, 下来是听. 而由于读写最容易以书本方式传播, 所以国人都学了个哑巴英语, 还相当于提高了难度. 背单词背读音远比背拼写重要, 所以我们最欠缺的是这个语音环境. 其次是磨时间. 精通英语得个一万词吧, 我们虽然大半辈子都在学英语,然而一天投入的时间很少, 也许一个小时都不到, 学习时间有一个最低时间门槛, 这个门槛下面的学习时间还敌不过遗忘曲线. 这就是为什么在英语环境中的英语提高速度很快, 每天16个小时可以学习, 多数还是听说环境.
所以,未来AR有可能帮助语言学习者创造虚拟的听说环境, 快速学习语言.

在图形化培训课上向丁老师提了职业发展道路和建议日后进修的培训, 丁老师先讲了自身经历, 她是70末, 从软件测试工程师转型, 以前也喜欢做培训, 后来自考了在职心理学硕士研究生, 就是因为喜欢这个行业才继续来做. 其次, 讲了下职业发展的四个方向, 第一是教学教研方向, 第二是市场方向, 第三是教学平台方向, 第四是AI结合教学方向(马斯克也讲过AI辅助或主导教学是未来趋势), 从所在组织分为体制内中小学校和体制外教培机构, 上升路线都是向着校长或总监.体制内还需要承接国家课题.说到教学教研培训进修, 可以参考国外的CSTA(听得不清或许是CSPA?)

因为家里的网络很烂, 想着有什么可以做网络加速的服务.
找了下有下面这些, 怎么用再研究:

  • polipo
  • privoxy
  • tinyproxy
  • squid
  • gost
    似乎nginx也可以

用了squid, 下面说下配置

在CentOS的配置如下

sudo yum install squid
sudo vim /etc/squid/squid.conf

squid.conf主要配置如下:

http_port 3128 # 这儿自己修改

acl allowed_network src xx.xx.xx.xx/32 # 这儿填上自己的IP
http_access allow allowed_network
access_log /var/log/squid/access.log squid

配置完以后启动和停止服务, 以及查看端口是否启用:

sudo systemctl start squid
sudo ss -plnut|grep squid
sudo systemctl stop squid

最后记得看在运营商后台的服务器配置, 要打开对应的端口号
参考 https://juejin.cn/post/7241816682524360765

windows上的设置

这儿有个快速打开代理设置页面的方式: 运行 ms-settings:network-proxy
另外,如果是chrome浏览器, 用SwitchyOmega可以灵活设置代理规则.
测试代理的方式: curl -x 代理地址:端口 https://www.baidu.com

之前在小程序上一直使用的是Ucharts, 但最近发现一个问题, 在图表上同时画8条折线和1个散点图的时候, 在iPhone端(具体是iPhone12)上会渲染报错. 在开发端模拟器和安卓上都没有问题. 原想升级更新一下看能否解决, 但发现这个库"@qiun/wx-ucharts": "^2.5.0-20230101"一年多以来没有更新了, 所以也无法解决. 然后就找下其他库.

Echarts-for-weixin

原是百度的项目, 后来捐赠给了apache基金会. 能捐给基金会应该是老牌而强大了. github上有大拿做了小程序兼容版, star有6.9K了. 而Echarts的原项目已经有59.2k的star. Echarts.js的体积比较大, 接近1M.

wx-charts

从描述来看是字节做的. 也有4.9K的star. 但项目不活跃, 最近更新已经在5年前.体积倒是很小. demo也可以运行. 只是在微信开发工具上有几个过期报错

worker.js?libName=WAAccelerateWorker.js:1 [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around July 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.
t.onmessage @ worker.js?libName=WAAccelerateWorker.js:1
[pages/charts/line/line] [Component] <canvas>: canvas 2d 接口支持同层渲染且性能更佳,建议切换使用。详见文档 https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html#Canvas-2D-%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81

wx-F2

是阿里旗下的蚂蚁金服做的, 还有自己的官网, F2有7.8K的star, wx-F2有1.3k. 但也不活跃, 最新更新也是4年前.

一级1.1.1认识scratch

报名网址 http://www.qceit.org.cn
注册: 身份证/姓名/密码/手机/邮箱
选择考试地点(xx学校),考试科目, 在读学校.
考试标准下载: http://www.kpcb.org.cn/h-col-127.html

一级1.1.2一级考纲介绍

理解Scratch功能区
学会拖拽
学会开始和停止
理解参数
完成一个顺序结构的程序
播放一段音频/导入声音
切换背景
导入角色/绘制角色/设置大小
切换角色造型/移动/旋转
保存项目和打开项目
会画流程图

知识体系 单选 判断 编程
平台操作14分 6 2 6
造型和背景切换30分 14 6 10
角色的操作30分 14 6 10
声音16分 8 4 4
逻辑推理和编程数学10分 8 2 0
总分值 50 20 30

一级1.1.3Scratch基本介绍

代码区四个区域介绍
造型tab介绍
声音tab介绍

一级1.2我爱编程

介绍流程图, 依据标准美国 ISO5807
常见流程图符号 :

符号 含义
箭头 执行方向
跑道圆 起止符号
矩形 程序
菱形 判断
平行四边形 输入输出(少见)
引线框 注释
四字形 已定义流程(少见)
圆圈 同页参考(少见)
盾形 换页参考(少见)

什么是事件

学习代码:

绿旗事件
说 你好 2秒
说 你好
说 ""
移到x: m y: n
移动 10 步
重复执行 n 次
将大小设为 80
更换背景
添加人物
修改人物大小(两种修改方式: 通过代码缩放/修改原图)
让人物依次说话

一级1.3派对时间

造型的切换
声音的播放/播放等待
声音的编辑

一级1.4大风车转啊转

背景和造型的自我设计
旋转角度
左右翻转和任意旋转的区别
碰到边缘就反弹
代码设置旋转方式

一级1.5电子相册

加载图片到背景
事件:当角色被点击

一级1.6小星星

使用乐器类角色编排声音,组成乐曲
录制声音
事件: 当背景切换为

二级2.1二级考纲介绍

理解上下层关系/坐标系
选择/循环语句, 并掌握流程图
使用画笔并调整粗细
控制角色大小/特效/可见
侦测指令
录入声音并处理
数学运算/逻辑运算/关系运算
理解二进制/十进制/十六进制
二级中不考察的: 变量/广播/克隆

二级2.2海底世界

循环,包括一直循环/按步数(for循环)/按条件(while循环)
条件判断
设置大小
角色复制(右键复制)
随机数

二级2.3星际迷航

笛卡尔坐标系(xy坐标系), x:[-240,240],y:[-180,180]
圆周角度: [0,360)*N
旋转: 相对角度, 面向: 绝对角度
左右翻转与角度: [0,180]向右, [181,359]向右. 这儿有违反正常逻辑的地方, 向左有181个值,而向右只有179个值. 虽然0~180都是向右,但会影响移动的方向, 也就是说移动语句仍然是沿着角度方向移动的.
面向: 除了面向鼠标,还能面向物体
滑行到: 除了到坐标,还能到随机位置/鼠标/物体

二级2.4飞行超人

相对移动. 不是编程概念, 而是人物不动, 背景相对人物移动时, 感觉是人物在移动.
移到最"前面"和"前移""1"层 图层设置.
移到最前面

二级2.5景区伴游

如果...那么...否则...
讲到布尔表达式及布尔值. 布尔值可以直接被"说"
碰到鼠标
碰到颜色
颜色碰到颜色

二级2.6小猫巡线

介绍了单轨迹传感器/双轨迹传感器. 双轨迹又有贴在一起的和分开的.
用"颜色碰到颜色"和控制小猫在轨迹上移动

二级2.7绘制多边形

主要学习画笔模块. 非默认模块,需要增加
落笔/抬笔/擦除/位置/颜色/方向/粗细

二级2.8魔法森林

7种特效.这儿总感觉中文翻译词不达意, 所以增加了英文原文

  • 颜色(color) 0~200
  • 鱼眼(fisheye) 取值无限制
  • 旋涡(whirl) 取值无限制
  • 像素化(pixelate) 其实是打马赛克
  • 马赛克(mosaic) 其实是阵列化
  • 亮度(brightness) -100~100
  • 虚像(ghost) 0~100. 其实并不是虚化,而是透明度
    虚像100后和隐藏一样, 都看不到. 但有区别是, 虚像的颜色侦测还是会有作用.

二级2.9迷宫寻宝

使用键盘操作小猫移动, 穿过黑色线条的迷宫, 找到宝藏, 并躲避幽灵.
没有太多新概念. 但是使用了逻辑或

三级3.1三级考纲介绍

三级3.2幸运大转盘

三级3.3天上掉馅饼

三级3.4超级马里奥

三级3.5抓螃蟹

三级3.6星球大战

三级3.7绘画板

三级3.8图章工具

三级3.9打字游戏

四级4.1四级考纲介绍

四级4.2字符加密

四级4.3贪吃蛇1

四级4.4贪吃蛇2

四级4.5贪吃蛇3

四级4.6分形雪花

四级4.7冒泡排序算法

四级4.8算法效率

官方文档
因为和python很像, 但又和python完全独立, 所以就说下区别, 没有说的就是和python一样:

class_name extends

因为一个文件就是一个类,跟java类似.
class_name是类名, 只有想让其他类(文件)引用的时候才要起名字.
extends就是扩展父类,也就是继承.

func

定义函数的关键字. python是def. 所以这个像是js的function的缩写

match

match相当于C的switch,但python一直没有类似switch的语句, 他们局的if/else足够了...

match param3:
  3:
    print("param3 is 3!")
  _:
    print("param3 is not 3!")

_和default一个意思
match还支持一些更复杂的匹配方式, 这儿不罗列了, 需要的时候再去看官方文档.

is

检测变量是否继承自给定的类,或检测该变量是否为给定的内置类型。

as

尝试将值转换为给定类型的值

变量常量

跟js类似分别是var/const. python是不需要变量关键词的.
定义数组的方式没有什么不同,但定义dict的方式比较多样, 除了冒号还可以使用等号, 使用冒号的时候语法同python, key需要用双引号, 使用等号的时候类似js, key可以不用双引号(官方文档说这个事lua风格,我没用过lua):

var dict = {"key": "value", 2: 3}
var other_dict = {key = "value", other_key = 2}

访问key的方式和js一样, 比python方便: dict.key或者dict["key"]

另外还支持严格变量类型检查:

var typed_var: int
var inferred_type := "String"
var s : String = 'hello'

enum和vector

enum类似于C

# Enums.
enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}

# Built-in vector types.
var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)

static

可以声明静态变量, 这个也类似C

signal

定义信号

breakpoint

用来设置脚本编辑器辅助调试断点的关键字。与在脚本编辑器每行最左侧点击红点创建断点不同, breakpoint 关键字可以储存在脚本内部。在不同机器上使用版本工具时,由 breakpoint 关键字创建的断点仍旧有效。

preload

预加载一个类或变量,参见 类作为资源 。

await

等待信号或协程完成,参见等待信号和协程。似乎类似于ES6

assert

断言条件,如果失败则记录错误。在非调试版本中忽略掉断言语法。参见 Assert 关键字。
少见的原生带断言且把断言作为关键字的语言了. 别的语言大多需要原生库或者第三方库实现.

void

用于代表函数不返回任何值. 借用的C语法.

特殊常数 PI TAU INF NAN

PI(π)常数。
TAU(τ)常数。
INF 无穷常量,用于比较和计算结果. 这个缩写我有点接受不了, 因为.inf文件指的是information, 更多用作信息而不是无穷.
NAN(非数)常量,用作计算后不可能得到的结果。

运算符

基本的+-*/没有问题, 还支持**乘方, %取余.
按位运算和C,python都类似, 与或非分别是&|~,完全一致. 异或是^, 位移是>> <<, 但没有循环位移>>>
逻辑比较和多数一致, 其中不等于也是!=.
逻辑运算同时支持python和js运算符, 也就是not and or! && ||同时支持.但官方更推荐not and or风格, 比较容易理解且不容易混淆. 嗯, 这个我觉得是看个人语言习惯了. 要说符号看得头晕我觉得还得是正则表达式.
三元运算符:变量=真的值 if 条件 else 假的值
自加类运算符+= -= *= /=都支持,但不支持++ --

可能和预期不符的运算

以下来自官方文档:

一些运算符的运算机制可能会与你的预期有所不符:

若运算符 / 两端的数值均为 int,则进行整数除法而非浮点数除法。例如: 5 /2 == 2 中 2 为该算式的结果而非 2.5 为结果。若希望进行浮点数运算,请将该运算符两端的其中一个数值的类型改为 float 。例如:直接使用浮点数( x / 2.0 )、转换类型( float(x) / y )、乘以 1.0 ( x * 1.0 / y )等。

运算符 % 仅适用于整型数值的取余运算。对于小数的取余运算,请使用 fmod() 方法。

对于负值,% 运算符和 fmod() 函数使用 截断算法 而非向负无穷大舍入,此时余数会带有符号(即余数可能为负)。如果你需要数学意义上的余数,请改用 posmod() 和 fposmod() 函数。

运算符 ** 是 左结合运算符 ,也就是说, 2 ** 2 ** 3 这个运算等价于 (2 ** 2) ** 3 。对此,请使用括号来处理该运算的优先级,如 2 ** (2 ** 3)

== 和 != 运算符在有些情况下允许你比较不同类型的值(例如,1 == 1.0 的结果为真),但在其他情况下可能会发生运行时错误。如果你不能确定操作数的类型,可以安全地使用 is_same() 函数(但请注意,该函数对类型和引用更加严格)。要比较浮点数,请改用 is_equal_approx() 和 is_zero_approx() 函数。

字面量

布尔值 true false 和js一样,和python不同, python是True False
十六进制和二进制还是0xabc0b10110
另外支持一个很有趣的下划线数字写法, 就是在很长的数字中间插入_,和不插的意义一样, 但是方便阅读, 如:

12_345_678  # Equal to 12345678.
3.141_592_7  # Equal to 3.1415927.
0x8080_0000_ffff  # Equal to 0x80800000ffff.
0b11_00_11_00  # Equal to 0b11001100.

字符串

字符串只支持双引号"hello",不支持单引号. 但支持三双引"""hello"""和三单引'''hello'''
原始字符串(不转义)r"hello"和r'hello', 也支持三引号形式.
另外还有两个特殊字符串: stringName, $"name". nodePath: ^"Node/Label"
stringName是为了提高字符串效率构造的新的类型, 我的理解是相同字符串引用的是相同地址, 这样比较起来很快速, 不需要逐字比较.
转义字符如\n \t不在罗列,跟C js类似.
支持字符串格式化. 类似C形式的如:"We're waiting for %s." % "Godot", 注意这是一个字符串表达式形式的, 中间使用%连接. 格式化占位符和C语言类似. 多个占位符怎么办呢? 后面的实际内容就得换用数组形式, 如"%s was reluctant to learn %s, but now he enjoys it." % ["Estragon", "GDScript"]
由于格式化占位符缺乏意义, 也支持更现代的名称占位符, 但这个名称却不能是变量名, 得是dict的key名, 也不能用%简写连接, 得用String.format()方法, 如: "Hi, {name} v{version}! ".format({ "name":"Godette", "version":"3.0" })
%连接格式化字符串和变量, 与用.format连接的区别是, %对数字格式有更好的控制, 如加入前导0, 四舍五入显示等, 后者可读性更强, 所以有时候还得结合起来用, 如: "Hi, {0} v{version} ".format({0:"Godette", "version":" %0.2f" % 3.114}),显示为Hi, Godette v3.11

注解 @

@开头, 有点像C语言以#开头. C语言中#开头表示与编译器交互的语句.这儿@开头表示与编辑器交互的语句. 如把有些变量值导入编辑器中.
有一个特别提出来的@onready注解, 可以将变量的赋值推迟到ready以后, 而不需要在_ready()回调里面再写一次.

代码区块

这个仅仅是为了方便将超长的一段代码用编辑器折叠的. 一般编辑器可以折叠一个函数, 而代码区块可以折叠多个函数,只要是在一个区块中.
代码区块是写在注释里的一对#region#endregion, 嗯, 这个跟我写C的风格有点类似, 我也喜欢将同类代码用一对注释括起来:

# This comment is outside the code region. It will be visible when collapsed.
#region Terrain generation
# This comment is inside the code region. It won't be visible when collapsed.
func generate_lakes():
    pass

func generate_hills():
    pass
#endregion

#region Terrain population
func place_vegetation():
    pass

func place_roads():
    pass
#endregion

内置类型

除了int float Array String等这些一般语言都有的内置类型以外, 还有很多特有的内置类型, 如向量Vector2 Color等, 有需要请看官文.

Array数组

var a = []
a.append(1) # 尾部添加
a.pop_front() #头部弹出
a.pop_back() #尾部弹出
a[0] # 第一个元素
a[-1] # 倒数第一个元素. 比较特别,index可以为负值,就是倒数.
a.size() # 取长度

高效运行

数组也支持类型化, 并且对于巨大的数组, 为提高效率还支持密集存储(密存), 密存类似于C的数组, 要求数组内部所有的数据类型相同, 且在内存中连续存放.

callable 可调用体

这个稍微有些奇怪. 别的语言把函数也当做变量可以赋值, 新的变量就是函数名. GDScript赋值是一样的, 但调用却一定要加call. 如var x = f调用需要写成x.call()而不是x()

声明函数的返回值

函数定义时候可以声明其返回值, 以对函数进行更严格的检查, 用->表示, 如:

func _init() -> void:
    print(_data)

函数形参也可以要求类型检查

func my_function(a: int, b: String):
    pass

也支持匿名函数直接赋值给变量.
还支持所谓静态函数, 其实相当于js的原型函数, 或者是class的函数, 不能访问实例(对象)的变量.

static func sum2(a, b):
    return a + b

类的构造函数

func _init(arg):
   super("some_default", arg) # Call the custom base constructor.

## getter和setter函数
这个显得比较高级了, 类似js中也有这样的函数. 并且vue.js里使用get/set函数保证界面刷新和数据更新同步.
```python
var milliseconds: int = 0
var seconds: int:
    get:
        return milliseconds / 1000
    set(value):
        milliseconds = value * 1000

写到这儿我稍微有点担心这个GPScript了, 因为这个语言里面用了很多高级的方法, 而且经常会更新和增加新的语法. 在其他语言里是有一个执行委员会会议确定, 又有很多大公司在写解释器, 又有很多第三方在写库文件, 整个一套复杂而有机的机制, 或者说形成了生态. GDScript虽然是游戏定制语言, 但是能否形成这样的完善程度, 只有拭目以待了.
刚查了gdscript在github上的仓库数, 有52.9k,和js的20.2M个和python的10.7M个, C的2.4M个真的相形见绌了.