• 回流招聘 “血泪史” at 2022年03月22日

    1 改成双休 2 提高工资 3 撩 Java 开发转 Ruby

    我这项目也正发愁呢,业务不难,就是不太写的动了。这一版上线了,后续开发也得找人接。

  • 除非你平时说话不用“除非”

    否则还是会用到 unless(除非) 的

  • 关于前端的思考和疑惑 at 2022年01月04日

    Rails7 提供了可选前端方案,官方推出的 Hotwire 生态还是白板,轮子基本需要自己撸。所以目前还是 Rails6 时代的 Webpacker 是比较成熟好用。webpacker 和 rails 结合一般是 2 种方法:

    1 使用 React/vue/Angular 接管前端路由。rails 只提供 API。

    好处:几乎可以利用全部前端生态。

    弊端:需要管理前后端 2 套路由,增加心智维护成本和开发量,很多简单的页面本来 render 一下的事,就需要分别写一个前端页面 +1 个 API。而且两套路由,在做权限管理的时候就会非常抓狂。

    2 使用 Rails 的路由 + 部分 React/Vue 的页面渲染+Turbolinks/Turbo(可选)

    好处:

    • 灵活自由
    • 一套 restful 路由非常整洁。
    • 简单的展示页面/列表不用去写前端 js 部分。

    弊端:

    • 需要自己处理 Turbolinks/Turbo 的一些坑,当然可以选择禁用。
    • 前端生态圈很多轮子不能开箱即用了,需要自己配置折腾一下。甚至有些根本不能用。
    • 需要维护 2 套 view 文件,其中 rails 那套可能就一行代码,但是必须写,很烦人。

    回答问题

    1) 如果使用 yarn add xxxx 其他的 js 库,是不是意味着 import xxxx 就可以找到 ?

    是的

    2) 如果自己编写的 yyyy.js 放在 app/javascript/packs, 应该写 import yyyy 嘛?

    写相对路径

    import xxx from './yyyy'
    

    3) bootstrap 依赖 jquery,导入了 bootstrap 是不是不用在单独导入 jquery?

    把 jquery 注册到全局就行了,你参考下这个 config/webpack/environment.js ,VUE+jquery 的

    const { environment } = require('@rails/webpacker')
    const { VueLoaderPlugin } = require('vue-loader')
    const vue = require('./loaders/vue')
    const webpack = require('webpack')
    
    environment.plugins.append('Provide',
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            Popper: ['popper.js', 'default'] 
        })
    )
    environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
    environment.loaders.prepend('vue', vue)
    module.exports = environment
    
    

    4) 这个目录 app/javascript/channels 是做什么用的呢 ?

    action_cable组件的默认 js

    可以用 rails g channel 生成一个看看里面有什么,主要用于实时通讯,比如聊天室。服务端依赖 redis。


    1) 如果使用 yarn add zzzz 其他的 css 库,是不是代表着 @import "path_zzzz" 必须对应到相应的 css 文件?

    貌似是的

    2) 这个目录 app/assets/stylesheets 默认情况下会创建针对控制器 Controller 的 css 文件,哪里制定它的呢 ?

    其实并不需要定制,全部写到 javascript/stylesheets/application.scss 里就行了,因为 require 进来的文件似乎有加载顺序的问题。 如果你用的 vue 或者 react,那你的样式最好遵循前端框架约定。

    官网指南看上去还没整明白,望大神指点迷津,有没有 6 版的中文手册之类的...

    目前是没有的中文官网指南还是 Rails5 的,不过足够用了。

    Rails 是个 MVC 框架,目前 V 还是用前端生态里的实践方案会比较好,Rails 提供的默认前端解决方案并不是很现代,过于强调复用,会导致 view 碎片化。而前端的 C 层解决方案又是堆 shi 山的副产物,而且并不能让后端省去 C 层开发,而导致前后端分裂。所以 Rails 官网指南重点学习 M 和 C 就行了。其他的完全不看都可以,像 mailer action_cable 这些并不是一个 Web Application 必须的。

    M 层和 C 层 Rails5 到 Rails7 几乎没有什么变化。而且 Rails 精髓也就在 M 和 C。

  • OpenGL 是 3D 图形编程,后端语言主要是业务编程,还是有很大差别的。

  • 我怎么感觉少了两个 0,看第十条要求很高啊。

  • 手动的话起 4 个进程就好了。

    一般用 passenger(nginx)管理进程,全自动的。

  • c 里面怎么嵌入 ruby 代码 at 2021年05月17日

    我感觉不行吧,主要是 gem 安装问题。

  • c 里面怎么嵌入 ruby 代码 at 2021年05月16日

    不知道具体需求是什么。类似 PYQT 的绑定?

  • 不面向工资编程,所以劣币少,急功近利的人少,戾气少。

  • 目测是 SEO 引流贴

  • 666

  • 其实可能只是你们的前端单纯的恶心 ActiveAdmin。

    让他们自行选择用 AntDesign、ElementUI 或是 Vuetify 就解决问题了。 GraphQL 真的是没有必要。前后端都需要学习和适应,还要处理不熟悉的逻辑问题。 感觉比把前端培训会 Rails 的 model 和 restful 成本更高。

    如果前端愿意 fullstack 的话自己随便整合一个 UI 框架,用 turbolinks 也是爽的不要不要的。

  • 利用好元编程重构下代码 at 2021年04月11日

    业务重构还是面向对象吧,元编程主要用来写工具代码。

  • 你的代码可以运行啊。 你先执行下 yarn install

  • 带 html 结尾通常是 2 个需求:

    1 SEO 的伪静态需求。早期 web 页面通常都是一串几十位的参数结尾的 url,被视为不利于 seo。

    而实际上长 url 对搜索引擎收录并没有太大影响,主要是

    /1?a=aaa&b=bbb
    /1.html?a=aaa&b=bbb
    /1.html?b=bbb&a=aaa&ref=baidu.com
    

    这 3 个 url 会被认为是 3 个不同页面。

    另外 SEO 人员认为语义化的 url 有助于 seo 排名。所以国内 SEO 站经常出现,

    /chanpin/jianjie.html
    

    这种过度 seo 的 url

    2 伪装后端 web 框架信息和开发语言信息,伪装成 html 静态页面,防止垃圾程序员写出的代码被注入、webshell 攻击。 而且这种程序很多都有生成 html 的方案,前端加个 squid,代理起来也更统一,更不容易出错,也对运维人员更友好。

    所以看到比较有历史的论坛程序和 cms 程序都是 /forum-1.html 这种,主要也照顾用户的惯性感受。

    而 rails 团队的激进更新风格,注入、webshell 漏洞基本不会发生,一旦发现都会很快被修复。用 restful 的 url 也根本不会有对 SEO 的不友好,所以一般看不到 rails 程序的 url 有 format。

    如果想要生成 html 结尾的 url,看路由一章就行,可以生成这种风格的 url,程序也能正常解析。 https://ruby-china.github.io/rails-guides/routing.html

    只不过并没有什么必要。

    而用 rails 开发“产品”的程序员层次通常比较高,合作的奇葩 SEO 人员也较少,也很不容易被 SEO 忽悠,对审美通常也有要求。所以 rails 开发的程序.html 结尾的 url 并不常见。

  • 哈,默认 1000 条,满足大部分伪自增需求。

    尽量自己做下伪自增工作。

  • find_each 是 order by 主键的,加上排序会有问题。 送你一个带 order 的扩展

    class ApplicationRecord < ActiveRecord::Base
      self.abstract_class = true
    
      def self.find_eachs(limit: nil , batch: 1000 , order: :id , &block)
        count       = 0 
        last_offset = nil
        next_break  = batch
        data = self.order(order).limit(batch)
    
        until data.blank?
          data.each do |dt|
            count += 1
            block.call(dt)
            last_offset = dt.attributes[order.to_s]
            break if count >= next_break
            break if limit and count >= limit 
          end
          break if limit and count >= limit 
          next_break += batch
          data = self.where("#{order} > ?" , last_offset).order(order).limit(batch)
        end
        count
      end
    
      def self.find_each_datas(limit: nil , batch: 1000 , order: :id , &block)
        count       = 0 
        last_offset = nil
        next_break  = batch
        data = self.order(order).limit(batch)
    
        until data.blank?
          block.call(data)
          data.each do |dt|
            count += 1
            last_offset = dt.attributes[order.to_s]
            break if count >= next_break
            break if limit and count >= limit 
          end
          break if limit and count >= limit 
          next_break += batch
          data = self.where("#{order} > ?" , last_offset).order(order).limit(batch)
        end
        count
      end
    end
    
    
  • WSL1 目前执行 rake 还是比较慢,可能和权限之类的东西有关,没有深究,因为 WSL2 就要出来了。Inside 的 Win 10 已经可以使用 WSL2 了,不过生产机器没敢安装,我等正式版。

  • Ruby 比较适合的不是面向工资编程,而是面向收益编程。也就是说你用 Ruby 做了一件事,这件事有很大收益,包括但不限于 money,而大多数人为了工资,那肯定坚持不下去。

    再者目前缺少大佬推广,为什么呢?现在阶段比较热的是深度学习,谁在这个阶段想把 Ruby 强推起来也难。谁叫 Matz 押宝的不是机器学习而是嵌入式呢?(毕竟日本是电子大国基因)。而对于业务系统而言,虽然我认为 Ruby 比 Java 更适合,但 Java 的以下特点稳固了他的霸主地位:

    1. 轮子多覆盖各领域,满足“学一门语言工作一辈子”的面向工资的诉求。
    2. (管理者看起来)员工可插拔性强。
    3. 工种基数大,工会运动能力强。

    再看现阶段互联网、软件行业,主要处在业务系统填坑期,所谓“互联网+”也就是传统行业有大把的业务坑要填,这个阶段的最大诉求是“解决问题”,而 Java 的以上三个“工业语言”特性,来填坑最适合。Ruby 就不要在这里竞争了,Ruby 语言本身的“解决问题”的能力虽然也很强,但解决不了工源问题。而在大厂里面工会运动搞你也是分分钟的事。搞 Python 的还能说我做深度学习最好呀,Javascript 还能说有本事你写浏览器程序呀。Ruby....猝。

    Ruby 的优势是 创造性生产 。但从 Ruby 语言本身来讲,恢复火爆取决与以下几个条件:

    1. 市场上“业务填坑”需求基本慢慢饱和,转而需要创造性生产的时候。比如之前的 web2.0 时代初期、移动互联网初期。当某阶段老的领域已经逐渐饱和,已经很难靠 Farm 挣到钱了,新领域的淘金运动开始,Ruby 和 Rails 的各种优势又能被无限放大。运气好的话出一个 Facebook 大厂,差一点能出个豆瓣这样的中厂。

    2. 内置/第三方 JIT 引擎性能开始爆炸,加上 Ruby 语言级别的良好特性,导至各种高性能领域期望使用 Ruby 作为首选胶水语言。

    3. Ruby 押宝方向大爆发,比如之前押宝的嵌入式。(然而嵌入式这个方向难度还是很大的,毕竟比较硬,需要时间积累,高爆发领域还得是软一些的)

    以上 3 个条件任意同时满足 2 个,加上大咖的宣传,即可恢复荣光。但即便如此 Ruby 仍不是工业级别 Farm 的语言。不建议 Rubyist 面向工资编程。

    现在 Rubyist 应当考虑的是,找到自己愿意深耕 10 年以上的行业,这里说的行业不是互联网、软件,而是垂直行业,无论汽车、O2O、教育、服装、奢侈品、金融,或者更加细分的领域,深入其中,利用好 Ruby 的创造力,去创造工资以外的收益。当然就顺便就创造出了一些工作岗位。当然你也可以积累好 Ruby 的技术和团队,等下一个爆发的时候,可能你就是大厂的大佬。

  • 支持的吧

  • 可以使用 ActionCable + Fork 一个新进程解决耗时操作问题。

    class ExambleController < ApplicationController
      def create
        Process.fork do 
          Foo.loop(1000000) do |bar|
            ActionCable.server.broadcast(channel_id , {bar: bar})
            sleep 0.1
          end
        end
      end
    end
    
  • 今年主题很棒,好想去,可惜。。

  • 能上 RubyChina 应该都不会傻到用其他语言去写后端,项目方指定语言的除外。

  • 如果目的只是写博客文章的话,google cloud 一键部署 WordPress 就行。 不想搭建的话简书就可以,就是有些敏感内容会被河蟹。

  • 管道可以避免无节操的继承关系,防止 object 无限变大,是非常好的特性。口水 Elixir 这个特性好久了。

  • 活太多 1 个人干不完,用 10 个全栈还是 5 个前端 5 个后端。成本和团队成型速度是不同的,管理难度根据项目特点不同差别也是很大的。

    由于市场需求、成本计算和管理人员水平不达标,通常高端人才价格低于实际应得酬劳,而专业型工种,技能及格的“人才”价格普遍虚高,蜜汁自信。楼主说的应该是后一种。

  • host 不用设置,完全自动的,跟本机一样。

  • 编译的话是需要,不过我没编译成功,试用的网友编译好的版本。

  • en,Win10 开启缩放就好了,字体倍儿棒,之前没法用是因为 n 多软件 HDPI 的设计没跟上,缩放后全是毛边,现在基本都搞定了。

    rake rails 慢有说是 Windows Defender 的问题,不过我这是关闭的(非法途径关闭),可以等等 WSL2 正式版试试,目前 insider 了 https://www.oschina.net/news/107424/wsl-2-is-now-available-in-windows-insiders