V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zpvip  ›  全部回复第 4 页 / 共 26 页
回复总数  519
1  2  3  4  5  6  7  8  9  10 ... 26  
105 天前
回复了 zjiajun 创建的主题 加密货币 最近几天的炒币情况
玩币归赵
最后还是要手工照着图片数格子? Minecraft 有没有接口可以导入? 没有的话能不能用 Autohotkey 之类的自动化一下?
这种同事要珍惜, 他做的是 smoke test, 就是要瞎点, 不能有意外, 如果不换流程, 你得有提示用户哪做错了啊.

幸好你系统没交付就测出意外了, 你要感谢他.
想不到 Rails 团队的日常居然在别的团队就是一地鸡毛. Rails 团队的共识是发 Pull Request 一定要带测试, 而且 CRUD 测试也就是 Integration Test 中的 Request spec 根本不用自己写, 也用不 AI, 命令行就自动生成了. 然后再用 AI 补点其它测试, 比如说 Model 中自定义方法的 Unit tests 和 System specs, 重点 Test the behavior, not the implementation.

对, 我就是 V 站 2025 年尬吹 Rails 第一人.
111 天前
回复了 mizuhashi 创建的主题 程序员 我覺得 Ruby 最優秀的地方(RSpec)
@cloudzhou #15

Rails 的标准 CRUD 的 DB Migration, Controller, Model, View 还有 RSpec / Minitest 都是命令行生成的, 如果就真是标准的 Restful, 那测试就是 100% 覆盖且通过, 此时你还没有写一行代码, 只运行了一行命令, 例如:

bin/rails generate scaffold Post title:string body:text

具体什么过程, 可以去这看视频: https://kamal-deploy.org, 从 9:54 开始.

我一般会把 View 模板选做好, 不像 DHH 演示那样阳春. 当然实际情况不是这么简单, 各种一对多, 多对多关系, Post 嵌套 Comments 之类的, 补充一些测试用例也非常简单, 另外会提前安装测试相关的 Gems, 比如:
gem "capybara"
gem "selenium-webdriver"
gem 'webmock', '~> 3.25'
gem 'shoulda-matchers'
gem 'rspec-rails'
gem "factory_bot_rails",
gem "faker", "~> 3.5"

现在有了 AI, 它自己会发现这些 Gems 并用这些 Gems 去写 RSpecs. 所以覆盖率 95% 以上是不难的.

一般 Rails 程序员都会有个启动模板, 也可以用别人现成的.
https://www.youtube.com/watch?v=nKiZz8TNHuU
https://github.com/nickjj/docker-rails-example

字段重命名的事, IDE 批量替换就可以了吧, 如果测试覆盖率好, 一下就可以找出漏网之鱼吧. 当然, 最简单的方法就是不改旧代码, 加个别名就可以了, 李白, 字太白, 号诗仙, 几个名字同时可用, 以后有心情了也可以一天改一处, 发现一处改一处, 天天提交 Git commit 还可以混 KPI.

class User < ApplicationRecord
alias_attribute :name_老字段名, :name_新改的字段名
end

u = User.new
u.name_老字段名 = "Alice"

u.name_老字段名 # => "Alice"
u.name_新改的字段名 # => "Alice"

u.name_新改的字段名 = "Bob"
u.name_老字段名 # => "Bob"


我以前做了十多年 C++, 副业也用 PHP 开发过流量很大的系统, 后来尝试换成 Ruby on Rails, 发现这才是网站开发的正确方式, 再后来发现全职 RoR 岂不是更爽, C++ 又不会给更多钱.

年纪大了为了能更适应就业市场, 也尝试用 Go/C#/Java/PHP/JS (React, NodeJs), 越用越气, 相比 Ruby on Rails 真是太麻烦了, 稍写两下就感叹, 在 Ruby on Rails 不就一句话的事吗, 各种测试写得头痛, 难怪覆盖率上不去. 语法方面, Java 的 Lamda 把我气笑了, 只有一个抽象方法的接口?! 真是老气横秋, 感觉有人按着我的头写代码, 的确是很好的防呆设计.

AI 时代, 现在程序员一个顶十个, 全栈工程师应该更吃香, 希望我还能再战几年后再去卖红薯.
112 天前
回复了 mizuhashi 创建的主题 程序员 我覺得 Ruby 最優秀的地方(RSpec)
@kakki 我一直搞不明白很多团队的代码合并流程, 团队成员发 pull request 时不同时提交测试吗? pull request 合并前没有人审核代码吗?

如果新代码能通过各种测试, 有两人以上 approved, 能有什么破坏力?
@chesha1 #153

以前部署要设置服务器环境, 如 capistrano
https://github.com/capistrano/capistrano

我们用的 k8s, Argo CD

现在有了更简单的:
https://kamal-deploy.org

其实就是 docker

部署就是开始要设置一下, 以后都是一个命令, 并没有什么难的

用 Rails 的好处是, Convention over Configuration, 有强共识, 方便合作, 你加入一个新公司, 打开一个 Rails 项目, 马上就能上手. Js 嘛, 网上评价太多了, 我就不多说了.
@cloudzhou #155 鸡同鸭讲, 你根本没有听我在说什么. 我在说铲子好用, 你说你挖掘机力气大. 我说锤子好用, 你说你挖掘机力气大. 我说我们进山挖笋了, 你说你挖掘机力气大.

我说挖笋用不着挖掘机, 你说我就会挖笋.

我从来没说过 “DI 是为了常驻内存”。我的意思是,在 Rails 里一启动程序所有的类都已经自动加载好了,controller 类内部可以直接调用 model 类,不用像 Java 那样 package 、import 写一堆裹脚布,更不用小心翼翼搞个 DI 来“合法化”类之间的依赖。Rails 的哲学是 Convention over Configuration ,你关注业务逻辑就行,不用和框架 ceremony 打架。

你说“复杂的是业务逻辑”。对啊,复杂的是业务逻辑,那你还在那折腾层层架构、满世界抽象干嘛?让你把时间用在业务上,而不是写一堆 ceremony 骗自己做了工程化. 现在 AI 来了, 你那些裹脚布代码每次当 context 都是要花钱的, 花钱事小, 关键还占了 Context window 的字数, 现在又怪 AI 理解不了你的业务. 我不知道你用的什么模型, 我用 Cursor + claud 4 sonnet, 有 1 百万 token 的 context window, 我都直接长篇大论然后发送后去喝咖啡, 比如一个复杂带验证的表单, 前端带 hotwire js, 后端 model 连数据库带联查, 包括数据库 migration, 这么多东西, 几分钟后我回来时, 它就写得差不多了, 再 PUA 几轮, 写个测试就完美搞定了.

你的业务有多复杂, 发个例子看看, 你不会是甩给 AI 几个字, 让它 "写个淘宝" 就不管了吧.

世上没有什么万能的, 都是 Trade off, 有利就有弊, 前后端分离, 微服务相对 monolith 同样有利有弊. 所以要分时期, 知道自己做什么, 如果你真是拿屠龙刀打天下的主, 那你应该更清楚什么时候做什么, 就怕你是个在灶台打转的厨子, 天天大汗淋漓拿屠龙刀切土豆还说人家菜刀太菜了.
@lesismal 在射大雁这件事上, 我相信 Rails 在网站开发方面是最快梯队的, 以前来说, 手写代码量也是最少的, 代码少 Bugs 也少, 不写代码就没有 Bug :) 现在加上 AI, 我几乎都是用 Cursor 写提示词 + PUA Claude-4, Rails 代码量少就可以省 token, 也就是省钱省时间, 把 Java 那堆裹脚布放到上下文, 慢不说, 钱包要受更大的伤害了.

"在座的全是垃圾" 这句话没问题, 薯条也是垃圾食品中的战斗机, 但全世界都爱吃. 尊重你这种这手搓 SQL, 时间大把的极客, 那, 做人呢, 开心最重要了.
@cloudzhou #118
但凡,但凡,你去了解 GitHub 、Shopify 最近招聘,核心组件都在用 Go 等去重构
---------------------------------------------------------------------------------------------------
Github 我不知道他们是不是在用 go, 招聘的说明里, 含有各种语言, ruby, go, python, rust, c.
https://www.github.careers/careers-home

Shopify 根本没看到 go
https://www.shopify.com/careers/disciplines/engineering-data

就算用 go 也没问题啊, 如果一项工作涉及密集计算, Ruby/Rails 的做法就是单独开发一个 gem, Ruby 的 gem 本来就可以用 C/C++, Rust, go 开发, Ruby 只做 Ruby 该做的事.

例:
https://github.com/sparklemotion/nokogiri
https://github.com/ohler55/oj
https://github.com/huacnlee/rucaptcha

我评价一个语言的工业级, 习惯是广泛使用的中间件
比如大数据下 Kafka Flink ,运维革命性 Docker K8s 等
很抱歉,没有找到 ror 的影子
---------------------------------------------------------------------------------------------------
你是谁? 你评价工业级? Shopify 处理的是全球几百万商户的电商交易,GMV 千亿美金量级; Github 世界级的交友平台, 这不叫工业级,还要什么叫工业级? Kafka 、Flink 、K8s 这些项目多是系统级、分布式基础设施,天然会选择 Go/Java 这类静态编译语言。但这并不说明 Ruby/Rails 不是工业级,而是 Rails 专注点在业务开发,CRUD, 而非造分布式中间件。

Kafka 、Flink 解决的是分布式系统的问题; Rails 解决的是应用交付的问题。Rails 在 Shopify 、GitHub 这种量级上的实践,早就证明它的工业级价值。你拿高铁去耕田吗? 拖拉机不香吗?

==================================================

我的核心观点是, 不是说 Ruby/Rails 多牛, 能搞定 Github 和 Shopify 这种大网站, 恰恰相反, 我的意思是, 99%的网站都达不到 Github 和 Shopify 的级别, 就开始焦虑大雁是蒸着吃还是煮着吃, 你先快点射下来再说啊, 大雁都飞走了, 你还在那折腾 DI, Servcie, Interface, 跟前端讨论返回 String 还是 Array, 还在 diss Microservice 团队没给你准备好支付队列.

我提到的 IoT 平台开发已经算是一个中大型应用了, 我们用了 K8s, Argo CD 动态调整 Rails 服务器数量, 同时启动了几个 Sidekiq 分布式队列做数据入库, 还有 Redis 做缓存, 服务器常年压力在 10% - 30%, Ruby 性能是差, 但服务器便宜啊, 内存白菜价啊.

说回原话题, 从 ORM 的角度, Active Record 用了 Ruby 的元编程, 极其优雅, 做到了零样板代码, model 自动生成, 代码极简:
class User < ApplicationRecord
end

然后就你在全网站内不用声明, 不用引用, 就可以随便写:
User.find(1)
User.where(name: "Alice")
User.find_by_name("Alice")
user = User.find_by_email("[email protected]")
user.save
user.update(email: "...")
user.destroy

model 里面也是元编程, 把数据库关系和校验逻辑变成声明式语法,开发者写起来就像在说人话。
class User < ApplicationRecord
has_many :articles
validates :email, presence: true, uniqueness: true
end

Active Record 背后的哲学就是 Convention over Configuration 。不用写映射文件, 不用手动指定列到属性的映射。

最后给大家泼一下冷水, Ruby 学校没教, 要自学, 考验自学能力, Rails 入门陡峭, 入门后一马平川. 你如果想开飞机, 不好意思, 要考证, 骑自行车不用考证.
@cloudzhou #102

你举 FAANG 大都用静态语言这一点没错,(Facebook 用 PHP), 但那不是“因为静态语言一定优于动态语言”,而是看 CTO 或创始人用的是什么. 有点像 "今天世界上最先进的运输系统的设计,是由两千年前两匹战马的屁股宽度来决定的".

大公司的发展必然加入形形色色的人, 人多了, 组织架构也会带来更多的技术选择。但真正有几个公司能有成千上万的开发团队,中小公司开几个 VPS 的业务就在东施效颦, 这是完全没必要的.

Rails 在大公司真实案例多了去了:

- GitHub ,最初就是 Rails 单体,支撑过数亿级用户,直到今天核心依然是 Rails 。
- Shopify ,全球电商 SaaS 巨头,业务量之大足以秒杀国内绝大多数 Java 项目,照样用 Rails 单体架构搞定,直到后来业务实在复杂有少量拆分。
- Basecamp 就不说了,人家直接靠 Rails 吃饭,而且能养活一个公司二十年。现在任性直接写 Vanilla JS, 也不 uglify, 也不压缩, 不搞那些 KPI 业务.

你说 ORM 要 `集中入口`, `lib 化`, `方法暴露`,Rails 的 `ActiveRecord` 天然就做到了。

你想把 DB 访问收敛?`Service Object` + `Concern` 分层就行。

审计、拦截? ActiveSupport callback 直接挂,全局生效。

查看 SQL ? Rails 的日志本来就打印出来所有 sql ,development 模式下就能清清楚楚看到走没走索引。索引这种事都能拿到台面上讲? 我在跟大一新生聊天吗?

而你们那套 Java DI 、Spring Boot 的套路,那些引以为傲的单一功能原则,解耦, 很多情况下只是自 High ,说白了就是写一大堆配置和样板代码,把简单的问题复杂化, 最后一定会过度工程化, Rails 根本不需要 DI ,因为类加载直接就是常驻内存,controller 类里直接用 model 类和对象,少一大层 ceremony ,不香吗?当然我不排斥适度地解耦, 比如用 Service Object, PORO (Plain Old Ruby Object), 但不要有洁癖.

所谓“统一、可维护”,不是靠框架强迫出来的,而是靠团队 discipline 。Rails 的 Monolith 可以让你把精力放在业务逻辑本身,而不是在造一堆“防止程序员犯错”的样板层。复杂度应该放在业务里解决,而不是放在架构里自嗨。

Spring Boot 确实是大厂的选择,但那只是“企业级官僚组织”的选择, 你们继续沉迷在 接口、DTO 、Service 、Repository 、Factory 的样板代码的海洋吧。Rails 的选择是另一种道路:用更少的人力做出同样甚至更强大的系统。
@s5s5 #41, 来来来, 举例说明, 哪个前后端分离、微服务及其他语言框架的 CRUD 不能用 Rails SSR 搞定? 复杂性、性能瓶颈是出在 Rails?

前后端分离的出现是因为要切分任务, 微服务是切分功能, 都是在没有 AI 的情况下, 人的精力和水平有限, 搞不定.

一般要升职, 就要用前后端分离和微服务跟自己的 Manager 画饼, 然后招一堆人做自己的手下, 自己就能管人了, 然后每天开站会, 让各个团队对齐颗粒度, 尽做些浪费时间的事.

性能的问题 99%的网站都不用考虑, 最多做个 LB, 大不了 K8s, 我做 IoT 的, 时序数据库都是 TB 级别, 单表都上 TB, insert 都是时刻不停 1000 条一批插入的, 瓶颈绝对不在 Rails.

@cloudzhou #58 用的人少有利有弊, 利大于弊. Java 仔就像麦当劳的员工, 随便找随便开, 有你不多没你不少. 国内找不到可以找国外的.

那些整天宣扬静态,可编译语言适合大工程, TS 有类型更安全之类的人, 都是活在自己的想像里. 我用 Ruby 多年, 修过数不清的 Bug, 唯独没有遇到过数据类型的 Bug. 现在有了 AI, 不仅仅是静态语言开发容易了, 动态的也更容易啊, 测试都能给你写好, 什么临界条件都给你测全了. AI 写 Rails 的 RSpec 测试写得那叫一个漂亮.

Java 仔, C# 仔, 沉迷在你们的 DI 和 Service 里面吧, 说实话, 这么罗嗦的框架, 我看看代码都替你们头痛, 好多预防性编程, 把程序员当傻子防.
很多人根本没真正用过 Rails ,这已经是一种技术上的遗憾。你们天天吹前后端分离、Microservices ,殊不知那不过是自嗨,搞得整个项目复杂化、性能折腾、调试痛苦,用户体验倒退, 成天看着菊花转啊转。Rails 告诉你:什么是高效、简洁和稳健。

Rails 的开发效率是任何 JS 、C#、Java 、Python 框架都望尘莫及的。一个标准的 CRUD 网站,加上各种 Gems, 几小时就能上线一个带 RBAC 带后台的管理系统,ActiveRecord ORM 简直是魔法,数据库操作简单得让你怀疑人生。而你们那些前后端分离、手动调接口的项目,动不动就死在同步和状态管理上。

现在有了 AI ,99% 的网站根本不需要前后端分离。以前是前端的开发者可以自己定制后端, 以前是后端的开发者, 可以让 AI 帮你写前端。如果用 Hotwire 就可以告别 React 、Vue 的冗余和复杂性,如果用 Hotwire Native 适配一下,就可以用极少的代价上线 iOS + Android.

真正做过 Rails 的人,从来不想回到 JS/Java/C# 的折磨里。Rails 不只是开发工具,它是高效网站开发的标准,其他框架,只能是“绕路”的选择.
已经卸载了小红书, 有用的信息几乎没有. 上面全是 丝丝丝, 都是属蛇的, 如果丝是常态, 你小红书可以加个古代互联网的关注后"回复可见"功能就可以了啊, 用户体验极差.

如果你真不允许私域揽客也行, 但一个"私信"就解决问题了, 你那些限制不就是摆设了吗?
感谢楼主, 可以用来练习 API 编程
188 天前
回复了 kuanat 创建的主题 Go 编程语言 Go 语言的错误处理语法,不改了!
现在有 AI 了, javascript 我都用 AI 给我的 vanilla-js, bugfix 也是自己做, 大部分情况下根本不看代码.

以后 AI 就直接写二进制了, 人类不用参与, 显得多余.
@kk2syc

> 先问一个问题,请问淘宝官方的直通车搜索竞价业务怎么办呢?

这个业务不受影响啊。我要买 mac mini m4 , 你定价 5 千,我按价格排序,你排第一位,我没意见,毕竟你花了钱。这些竞价之后就是真实排序了啊。你去 google 搜索,也是看 Sponsored 之后的结果吧。
我说的按套餐中价格高的排序。如果要排在前面,套餐中的价格最高的也要很低才行。

如果我要买 mac mini m4 ,商家放个 m2 引流, 买家点个举报,核实后直接沉底就行了。V2EX 都能做到的事,淘宝一定也可以。

如果商家放个 m4 的电源线,可能关键字有匹配了,但至少进页面后没有 m4 真机,引进去也没有用,淘宝算法再好一点,也不会把电源线放前面,我记得以前如果一个商品价格离谱,淘宝都会有提示。

@byby 如果按套餐价格高的排序,的确不合适,但这是对商家不合适,如果按套餐价格低的排序,是对用户不合适。如果对商家不合适,商家自然会拆分套餐。m2 和 m4 怎么可能是算成套餐,但现实就是在一个页面上。
2024-09-06 13:46:19 +08:00
回复了 unidotnet 创建的主题 macOS Mac 版微信输入法更新后,没法打字了
升级了 macOS 14.6.1, 系统自带的输入法只能打一个汉字出来.
@zie 下载了微信输入法, 根本安装不了. quit unexpectedly

大家先别升 14.6.1, 这坑太大了.
分母
1  2  3  4  5  6  7  8  9  10 ... 26  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3880 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 05:28 · PVG 13:28 · LAX 21:28 · JFK 00:28
♥ Do have faith in what you're doing.