小天管理 发表的所有内容
-
最早初中的时候接触了易语言,当时接了不少私活,大部分都是找其他大佬开发的,其实自己懂的很少,应该是当时很小挣到不少钱,对编程语言开始很有兴趣,想着长大就从事软件开发这个行业了,因为以前学习差很爱玩,高中其实都没考上,算是走艺术生进的高中, 学了音乐专业后来又学了美术专业(因为之前初恋学美术,就没学音乐专业了, 当时就想着能在一起),只是为了通过艺术生渠道上大学而已,结果在美术培训艺考学校的时候和老师闹矛盾我就退学了,最后艺考也没参加,家里条件其实还行,因为家庭情况特殊(父母离异,又都从新组建了家庭),很长时间应该都在叛逆期,性格方面也感觉很奇怪,家里人也都惯着我。 高中期间(艺术生后期可以不用待学校) 2018 年在黑马程序员培训,培训期间学习没有现在这么认真,经常睡晚了第二天上课迟到,后来老师没办法让我和他们一起在办公室单独学习(看视频),毕业后当时行情还行没有现在这么差,学历经历啥的当时都是包装的,面试机会还是有很多的,最后也没面上,过了差不多一年(期间有娱乐有复习),一个算是培训班朋友的朋友给我内推到上海一个外企了(尼尔森,内推面试都没问什么技术),能力实在不足啊,英语差技术差社会经验也差,领导同事都很好,坚持了 3 个月,领导找我谈话很多次,觉得我进度太慢了,我就自己离职了,又开始了循环的娱乐复习娱乐复习找工作。期间意识到全日制学历的重要性,当时了解到了高职扩招可以弄到全日制大专(花了一周的时候调研,最后没走培训机构报考的,省了很多钱),2024 年终于拿到了毕业证。 2021 年的时候找到了一个工作持续到 2024 年(我也很介意虚假的包装,过意不去,我每次简历都改动的已经很贴近真实了,但是学历没办法,只能包装成大专,不然真的真的一个面试都没有,这家面试 HR 叫我简历发他,他进行排版,学历还改成了本科),在银行驻场开发,主要就是每天写存储过程和客户沟通,逻辑什么的访谈的时候 BA 已经写好中文了(雏形,后续和客户沟通基本改的面目全非),和 Java 后端也无太大关系(面的 Java 后端开发),太枯燥了,内网的环境,没法查资料,也没有任何规范,才开始工作肯定是可以学到一些东西的,大概半年吧,公司工作已经没东西能学到了,只能学习银行的业务(比较抗拒),后面回想起来感觉这种活任何一个人学个 3-4 个月就能干,真的没什么东西(稀巴烂,这世界真是个大草台班子,一年后换了个驻场银行都让我开始做小组长了,负责架构),入职的时候感觉 sql 都不是特别懂(现在 sql 水平其实也一般),第二家驻场银行我中午都不午休(没这个习惯,感觉中午午休下午会没精神),一般都看书(已经在做 sql 了不如把 sql 学精通,为以后 Java 做铺垫)(一直想做全栈开发,只是想想吧,不现实,不知道那么多大佬怎么实现的,天赋天赋太重要了)(看了 SQL 三本书,循环着看,SQL 必知必会看了 4 遍感觉都没吃透,可怕可怕,这还是最基础的书籍),2024 年 4 月离职了,实在不想干这种活了。又进入了复习 Java 找工作阶段。 复习的过程,之前复习基本每次都从基础看到敲到 2-3 个项目,好像每次都是到分布式架构就开始学不进去了(每次看视频,技术都在更新,使用的框架,流行的技术,越来越多,到底要学会多少,到底要学到什么地步,JAVA 后端工作到底是在做什么,Java 企业中开发到底是什么样的,大佬们都那么厉害嘛),复习了太多遍从基础到项目循环 4-5 次(并没有感觉基础有多牢固,离谱,想过是不是看视频不太行,太慢了,看书呢,看过很多黑马 Java 后端的视频, 每次复习都找复习那个阶段视频最新的,例如 V10 ,V11 ,V12 ,目前在看黑马和尚硅谷的配合一起,又是从 0 开始到看了敲了已经 4 个单体,开始进入 springcloud 阶段了) 自我认知,学历差( 2024 年才拿到全日制大专毕业证,用处暂时不大),英语差,头脑一般就是普通人,不知道 Java 该怎么学习该怎么进门该怎么快速提升(平时感觉获取别的知识点,资料,一般技术都很快很快,编程语言真的太难了,要学的东西太多了,真的太多了),有学习方式的原因,有英语的原因,有没真正进入 Java 工作的原因,有性格原因。没打算放弃,如论如何都要进这个行业的门,知道自己应该是不合适,没进门怎么能确定呢。 忠告,最低全日制本科学历是这个行业敲门砖,学历越高工资上限越高,英语对这个行业帮助很大会限制你的上限,如果不是特别特别喜欢别入这行,就算后续会回暖,找到适合自己的天赋,有天赋应该比没天赋的人学习快很多很多。不要刨根问底,不要有太多强迫症,这世界就是个草台班子。 感谢论坛各位大佬给予的帮助,逛了很久了,学到了很多东西。现在用 ChatGPT 对我帮助也很大。努力,努力。 实力并不会像爬坡一样平稳向上,而是像在爬楼梯,一阶一阶地往上爬。 简历: https://github.com/githubyuai/resume/blob/main/%E8%89%BE%E9%9B%A8%E7%AE%80%E5%8E%86.pdf
-
WASM-4 是一款使用 WebAssembly 实现的复古风格游戏机。凹语言作为国内首个面向 WebAssembly 设计的通用编程语言在 syscall/wasm4 内置标准库对 WASM4 平台提供了支持,从而为使用凹语言开发小游戏的用户提供最佳体验。 我们以一个简单的乒乓球游戏作为例子,看看如何开发 WASM4 游戏。 配置环境 安装凹语言 v0.15 以上的版本,或者通过以下 Go 命令安装最新的 wa 命令行: $ go install wa-lang.org/wa@master 然后通过以下命令创建一个 hello 新目录工程: $ wa init -wasm4 $ tree hello/ hello/ ├── README.md ├── src │ └── main.wa └── wa.mod 2 directories, 3 files 命令行环境进入 hello 目录后,输入wa run可以在浏览器打开查看效果。 程序整体骨架 直接修改src/main.wa文件: import ( "math/rand" "strconv" "syscall/wasm4" ) const ( width = 5 height = 15 ballSize = 5 screenSize = int(wasm4.SCREEN_SIZE) ) // 玩家 1(右边): 上下方向键 // 玩家 2(左边): ED 键对应上下键, 左右方向键盘控制 global game = NewPongGame(true) // 双人游戏 #wa:export update func Update { game.Input() game.Update() game.Draw() } Update 函数会以每秒 60 帧的频率被调用,其中分布出来游戏的输入、更新游戏状态并显示。 定义游戏对象 在对象中保存的游戏状态: // 游戏的状态 type PongGame :struct { isMultiplayer: bool // 多人游戏 ballX: int // 球的水平位置 ballY: int // 球的竖直位置 dirX: int // 球的方向 dirY: int // 球的方向 y1: int // 左边挡板位置 y2: int // 右边挡板位置 score1: int // 玩家分数 score2: int // 玩家分数 } // 构建一个新游戏对象 func NewPongGame(enableMultiplayer: bool) => *PongGame { return &PongGame{ isMultiplayer: enableMultiplayer, ballX: screenSize / 2, ballY: screenSize / 2, dirX: 1, dirY: 1, y1: screenSize / 2, y2: screenSize / 2, score1: 0, score2: 0, } } 主要是乒乓球、挡板等位置和方向信息。 处理输入键 通过不同方向键盘分别控制 2 个挡板的移动。 func PongGame.Input { // 第 1 个玩家 if pad := wasm4.GetGamePad1(); pad&wasm4.BUTTON_UP != 0 && this.y1 > 0 { this.y1 -= 2 } else if pad&wasm4.BUTTON_DOWN != 0 && this.y1+height < screenSize { this.y1 += 2 } // 第 2 个玩家或机器人 if this.isMultiplayer { // 左右方向键盘控制 if pad := wasm4.GetGamePad1(); pad&wasm4.BUTTON_LEFT != 0 && this.y2 > 0 { this.y2 -= 2 } else if pad&wasm4.BUTTON_RIGHT != 0 && this.y2+height < screenSize { this.y2 += 2 } if pad := wasm4.GetGamePad2(); pad&wasm4.BUTTON_UP != 0 && this.y2 > 0 { this.y2 -= 2 } else if pad&wasm4.BUTTON_DOWN != 0 && this.y2+height < screenSize { this.y2 += 2 } } else { this.y2 = this.ballY // 自动对齐到接球位置(TODO: 失误机制) } } 根据键盘更新挡板的位置信息。 更新游戏的状态 每秒钟 60 帧的速度更新状态: func PongGame.Update { // 更新球的方向 if dirNow := this.paddleCollision(); dirNow != 0 { wasm4.Tone(2000, 5, 100, wasm4.TONE_PULSE2|wasm4.TONE_MODE2) if rand.Int()%2 != 0 { this.dirX = dirNow this.dirY = -1 } else { this.dirX = dirNow this.dirY = 1 } } // 更新球的位置 this.ballX += this.dirX this.ballY += this.dirY // 检查球是否反弹 if this.ballY > screenSize || this.ballY < 0 { wasm4.Tone(2000, 5, 100, wasm4.TONE_PULSE2|wasm4.TONE_MODE2) this.dirY = -this.dirY } // 判断得分 if this.ballX <= 0 || this.ballX > screenSize { wasm4.Tone(1000, 5, 100, wasm4.TONE_PULSE2|wasm4.TONE_MODE2) if this.ballX <= 0 { // 左边玩家失球 this.score2 += 1 } else if this.ballX > screenSize { this.score1 += 1 // 右边玩家失球 } // 重置球位置 this.ballX = screenSize / 2 this.ballY = screenSize / 2 this.dirX = -this.dirX } } 同时判断失球和得分情况。以下是碰撞判断: func PongGame.paddleCollision => int { if this.ballX < width && this.ballY < this.y2+height && this.ballY+ballSize > this.y2 { return 1 } if this.ballX+ballSize > screenSize-width && this.ballY < this.y1+height && this.ballY+ballSize > this.y1 { return -1 } return 0 } 球碰到和超出边界表示失球得分。 如何画乒乓球和挡板 WASM4 的调色板寄存器一次只能存储 4 种颜色,可以通过更改这一寄存器来引入新的颜色。以下是 WASM4 默认的配色表: WASM4 内置的绘图函数不直接访问这个颜色表寄存器,而是访问同样能够存储 4 个颜色的 DRAW_COLORS 寄存器来指定对应的颜色表索引。可以通过wasm4.SetDrawColors函数完成。 绘制场景的代码: func PongGame.Draw { wasm4.SetDrawColors(0, 4) wasm4.SetDrawColors(1, 0) wasm4.Text(strconv.Itoa(this.score1), 85, 0) wasm4.Text(strconv.Itoa(this.score2), 70, 0) wasm4.Rect(screenSize/2, 0, 2, screenSize) wasm4.SetDrawColors(0, 2) wasm4.SetDrawColors(1, 3) wasm4.Oval(this.ballX, this.ballY, ballSize, ballSize) wasm4.Rect(0, this.y2, width, height) wasm4.Rect(screenSize-width, this.y1, width, height) } 到此乒乓球游戏就完成了。 完整代码 完整代码大约 150 行: https://github.com/wa-lang/wa/tree/master/waroot/examples/w4-pong 在线体验地址: https://wa-lang.org/wa/w4-pong/ 如果你也是游戏爱好者,也可以试试用凹语言开发自己的游戏了。
-
本人后端,前端只是顺手写写,之前主要用 vue2 但 vue3 已经出了很久了,不过我没用过,vue2 是不是进入淘汰倒计时了 所以 2024 年前端框架怎么选? vue2 vue3 react 请各位彦祖答疑解惑,并希望能给出理由 如果有其它更优秀的框架也欢迎推荐 谢谢
-
我最近把近两个多月时间尝试使用 AI 辅助编程的项目全部总结一遍,并且开源出来: https://www.broyustudio.com/ AI 助我写代码( 7 ):电子书朗读服务器版( Epub Server Reciter ) AI 助我写代码( 6 ):电子书本地朗读( Epub Local Reciter ) AI 助我写代码( 5 ):AI 自动解析剪贴板文本及图片( Clipboard AI ) AI 助我写代码( 4 ):Chrome 浏览器插件-Lookup (查单词) AI 助我写代码( 3 ):解析 YouTube 频道内容风格 AI 助我写代码( 2 ):图片浏览器 AI 助我写代码( 1 ):批量生成视频字幕 今天写到第 8 篇时,我发现前端/桌面项目普遍可以靠 AI 完成 90%左右的代码和功能,但是一旦开始后端开发,就出现非常多的问题,甚至仅仅是可用都做不到。其中,需要涉及到的编程概念和基础网络概念,这些都不是非程序员背景或经验能够完全靠 AI 解决的。 我的结论是:非程序员不可能全靠 AI 完成全部开发工作,甚至 AI 连初级程序员都无法代替。 真正有意义的是:非程序员可以依靠 AI 通过边做边学,很快掌握开发的基础技能,甚至发布产品——这是很多产品经理在做的事情,然而真正走到发布产品这一步,不管之前水平如何,都可以算是程序员中的一员了。 而这的确对于初级程序员有一定的风险,因为门槛更低了,只要程序员薪资还能保持一定水平,大量非专业、非科班的人员都很容易达到入门水平从而进入程序员求职市场。 可以想象的是,其他一些职业也会受到影响,比如:英语教培很容易被 AI 取代。
-
简洁得很,该有的基本功能都有了,目前急需下面功能,希望官方尽快更新。 PC 端 APP 类似 nextcloud 方向同步 App, 这样的话电脑中所有的文件都可以同步到 NAS 中,在外工作时候也可以保持所有地方文件一致。
-
也就是说国行的 iPhone ,不光 LLM 没有。 照片里的 AI 消除,也没有? 正式版会有变化吗?
-
主力 iPhone 因为开了 Wi-Fi calling ,所以没办法开定位服务。但是 Fog of World 又使用了非常多年,想继续记录轨迹。 想请问下单单只是运行 Fog of World 的话,iPhone 7 可以吗?或者有没有其它更合适的呢?
-
一个是 https://t.me/stopCA 另一个是 https://t.me/ISISwatch
-
做个小调查,现在年轻人都在外工作,认识的男女朋友大概率也是外地的,我想知道结婚的朋友,你们双方老家距离多远?
-
主页热议主题只能显示当日的吗,切换 7 天什么的都加载不出来,搜了一下站内有人提过同样的问题,但是没人回答。大家的都正常吗
-
想买台笔记本放在公司工位上查资料,平时不用来回背游戏本上下班了。 主要需求是浏览器查资料以及偶尔看个视频。 目前看中 pixelbook go 2019 ,还有其他 win 本或者 chromebook 本推荐吗,了解的不是很多。
-
我们项目组有些项目因为各种原因,不同项目开发管理需要隔离,目前考虑拿一服务器 装 pve 开 windows 虚拟机,大概 10 到 15 个人共用,请教一下各位大佬具备可行性吗? 目前从个人家里 all in boom 环境看,内网 pve 开 win 虚拟机,远程桌面上去开发,个人使用没有任何问题,体验和本地几乎没区别。 但是如果是服务器,用的人多,cpu 主频低,而且 io 是共享的,就不是很有底了。 各位大佬有经验不?或者建议?
-
我家里三台电脑, 一个 ubuntu 22.04, 一个 macos mini 一个 thinkpad windows 我主要用 macmini 一到晚上就非常卡, 不清楚怎么回事. 我就用这三台电脑直接 ping www.baidu.com 结果差别这么大? macos 和 linux 都是直接接的 电信路由器, thinkpad 接的路由器下面 华为路由器的 wifi
-
在博客、论坛的各种环境,经常需要图床用于保存和分享图片,但是很多付费和免费的图床都有一个问题,可能比较长时间后(也有可能短时间),图床网站不在了…… 一般来讲,每个图床网站同一个图片会生成不同的链接,导致一个图床挂了,就会让所有链接失效,而且只能新上传到一个图床,所有老链接只能手动一个一个修改。 为了解决这个问题,ipfs 图床 使用的了 ipfs 的技术,同一张图片每次上传的文件链接都一样的,然后通过 p2p 技术,一张图片链接可以通过多个网站同时打开。 原理 每个图片上传后,会根据图片文件生成固定的一个哈希,这个哈希规则是通用的。然后通过这个哈希值,可以在全球几百个的网站访问这种图片,如果其中一个网站挂了,更换一下图片链接就马上打开了。 一个图片被多个网站打开后,图片就被复制更多份,让图片的可靠率更高。 使用方法 在线网站 打开ipfs 图床 ,然后上传图片获取图片链接地址。 客户端上传 下载 ipfs-desktop 客户端,在客户端里面上传图片,然后获取图片地址,然后修改图片的域名。 这个方法有一个好处,始终保证你自己掌握一份图片备份,然后通过 p2p 技术,其它网站就可以随时打开这张图片。 如果你追求你的图片 100%可靠性,就需要使用这种方式。 优势 通过这种方式上传的图片,都不会被压缩,也不会被打码,100%原图。 不会因为网站停止运行导致图片丢失。 不会因为审核导致图片丢失。 图片看的人越多,图片被复制到的节点越多,越可靠。 原文: https://ipfsscan.io/post/2024/08/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A%E4%B8%8D%E5%8F%AF%E9%9D%A0%E7%9A%84%E9%97%AE%E9%A2%98/
-
使用 N5105 软路由的 ikuai 几年了,一直可以稳定获得 ipv6 和/56 的前缀,前几天突然不能获取 ipv6 了,表现为下图的症状: https://i.imgs.ovh/052c575a354f64e0909cc.png 同时,ikuai 同线路的 ipv4 是正常的。如图: https://i.imgs.ovh/a1720b9692d975bad5ff4.png 以为是运营商做了什么限制,用光猫拨号又是正常的,而且可以获取/56 的前缀: https://i.imgs.ovh/99cca566b4f3973912372.png https://i.imgs.ovh/6d327eae754c475d1b041.png 光猫桥接的设置如下: https://i.imgs.ovh/e55a4c1170ab800af1f5a.png 以为是设备的问题,换了爱快 Q6000 新装仍然是同样的症状,排除设备问题。 同小区另一台 N5105 软路由的 ikuai 一切正常,没有这个问题。 所以求助各位大佬,这个现象还可能是什么原因导致的? ps:因为设备比较多,分布在不同的地方,为了维护方便且安全需要在不同的地方使用 ipv6 直连 RDP ,所以是刚需。
-
这几天热搜一直在我们村。。(青岛路虎那个) 暂不谈论。。。 今天看半岛新闻 发了一片文章 《青岛最美小学,撤并!再见了,让每个学生吃着大虾看着大海、让每个老师说无怨无悔的神仙学校》 https://mp.weixin.qq.com/s/fhBA7oISN1345_hePsItLg 之前听我妈讲过小学因为招不到人,要合并到到镇上的小学。 起初听着我觉得还行,因为镇上那个小学教育水平或者其他综合方面跟定要比村里的好。 但是今天看了这篇文章,五味杂陈。 我小时候一个班 20 -30 人,课间操的时候都排不开。 无法想象一个班只有 2 个人的教室是怎么样的。
-
都是 zf 补贴,为啥那几个其余的那些城市就不做补贴? 这个时候才能看得出来什么地方适合生活一目了然?
-
我爸朋友话介绍去家里附近小区做保安 12 个钟月休 4 天才 3K ,我说继续找 IT 然后骂我
-
生活中会经常有一些定制图案的需求,比如定制海报,定制 T 恤,定制贴纸,定制手机壳等等,电商平台也有很多出售相关定制产品的商家。为什么没出现一个提供 print on demand 这种定制化服务的平台呢?
-
go memory model 中说: ...each read of a single-word-sized or sub-word-sized memory location must observe a value actually written to that location (perhaps by a concurrent executing goroutine) and not yet overwritten. 这句话是否可以理解为读一个字长以下的数据, 总是会读到某一次写入的数据, 而不会读到某个中间状态? 如果上述理解是正确的, 那么对于下面的程序: package main import ( "fmt" "sync" "time" ) type A struct { data string } func main() { a := &A{data: "b"} go func() { for { if a.data == "a" { a = &A{data: "b"} } else { a = &A{data: "a"} } } }() var wg sync.WaitGroup for i := 0; i < 100; i++ { wg.Add(1) go func() { for i := 0; i < 100000; i++ { // 复制 a 的指针, aa 在接下来的使用中应该指向同一个 A aa := a if aa.data != "a" && aa.data != "b" { panic(aa.data) } } wg.Done() }() } start := time.Now() wg.Wait() fmt.Println(time.Since(start)) } 由于指针 *A 是一个字长, 那么读取变量 a 总是会读到某一个 A 地址, 所以 panic 不会发生, 但实际上会出现: panic: goroutine 6 [running]: main.main.func2() /Users/a/test/test.go:44 +0xa0 created by main.main in goroutine 1 /Users/a/test/test.go:40 +0x44 exit status 2 这是为什么?
-
广东广电校园卡,320G 大流量,每月仅需 20 元!🎉 🔥 [流量大爆炸] 320G/月,其中 220G 国内流量,100G 省内流量! 🔊 [语音通话] 每月 200 分钟,通话无忧! 💸 [价格美丽] 原价 336 元/年,现在只要 240 元/年,续约也是 240 元/年,折合 20 元/月,性价比炸裂! 👥 [副卡福利] 主卡激活 30 天后,可办理副卡,副卡仅需 6 元/月,共享主卡流量 120G ! 📞 [办理方式] 私信我,广东省内自选号码,送卡上门轻松办理!
-
公司用 nuxt 开发了一个服务端渲染的网站,谷歌两天就收录了,百度手动提交一个多星期都没收录 然后看到淘宝上有很多做搜索引擎,百度收录的,想问问大佬们淘宝是用了啥办法能让百度收录
-
我们公司在某地硬件设备上装了视频监控,目前是上传到云存储桶里,为了节省存储带宽等成本,存的是 h.265 编码格式的视频,但是这样子在浏览器端没法播放 所以我想了两个方案 1. 浏览器端找能支持 h265 的播放器 js ,但是基本上找到的都是基于 wasm 的 ffmpeg ,也就是在浏览器端解码,然后通过 canvas 一帧一帧画,然后再用 audio 播放声音。感觉这个方案不是很好,可能会又吃性能又卡,还有可能声音画面不同步。 2.通过增加中间层服务,使用 ffmpeg+nodejs 进行转码(我不太会其他语言)。尝试了一下如果用 ffmpeg 完全把一个视频转换成 h264 的格式,耗费的时间会很长,有些长视频要半个多小时。 所以我现在的想法是: 我看浏览器的 video 标签加载视频时,也不是整个视频缓冲完才开始播放呀,metadata 加载到了就可以播放了?而且貌似也是播放一点加载一点,这样是不是可以用 ffmpeg+nodejs 做成实时转码的服务?浏览器端请求一小段,就转一小段,这样子就使得该视频原生支持 video 标签了,也不需要额外的播放器 js 了。同时也能使用 video 标签自带的进度条拖拽进度 想问下大家我的这个想法是否可行? 还有个问题,我看到一些方案里写 ffmpeg 转 m3u8 ,然后存一堆 ts 文件,浏览器端再用某个 js 播放库去播放,这样存储成本是不是又上来了?外加转码服务的服务器成本,搞不好还不如一开始直接存 h264 格式? ffmpeg+nodejs 有没有可能做到实时转码成原生 video 支持的格式,对于浏览器端来说属于无感知的转码那种的,不需要存文件,直接返回流给前端