Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
Diewin
@w7938940
VIP
NO. 2192 / 2012-05-14

28 Topics / 485 Replies
4 Followers
3 Following
76 Favorites
To Be A Coder.
No GitHub.
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • 前几天,西瓜创客的大佬来我司分享,谈到了中年危机,我觉得他的开场白,讲的非常好,分享给大家。 at September 20, 2020

    因为是“城一代”,不能像我这样从农村里来,还能回农村里去

  • 如何提高 Github 的 pull/push 速度 at September 15, 2020

    用路由器科学上网可以更方便,避免手机电脑电视盒子都要配置一次的问题,也能让那些不使用系统代理配置的应用通过代理访问。

  • 请教如何检测 docker rails application at August 04, 2020

    https://github.com/mperham/sidekiq/wiki/Signals

    TSTP tells Sidekiq to "quiet" as it will be shutting down at some point in the near future. It will stop fetching new jobs but continue working on current jobs. Use TSTP + TERM to guarantee shutdown within a time period. Best practice is to send TSTP at the start of a deploy and TERM at the end of a deploy.

    如果有任务运行的比较久的话,-t 也要设置的够长

  • 真的有无法使用自动化工具爬取数据的网站吗? at June 05, 2020

    反击爬虫,前端工程师的脑洞可以有多大?

  • brew update 实在找不出慢的原因了 at December 06, 2019

    上全局 VPN,不是 SS 的全局模式

  • 安利一下 TabNine 插件 at November 18, 2019

    现在内存这么便宜,8G/200 块,如果是用的 Macbook,那还有什么说的,直接换 16 寸那款 64G 版本

  • 聊聊 Web 接口设计和接口行为 at October 08, 2019

    如果用 RESTful 的风格和你说的这种是不是冲突

    {
        "code": "...",
        "message": "...",
        "details": {}
    }
    
  • 服务器被墙了怎么办 at September 19, 2019

    看过什么内容会不会有记录

  • 关于 ruby 的 rsa 公钥加密问题,请教各位大神,谢谢🙏 at September 02, 2019

    非对称加密,每次加密结果都会不一样

  • 关于 ruby 的 rsa 公钥加密问题,请教各位大神,谢谢🙏 at September 01, 2019

    尝试补全 go 的加密方法

    package main
    import (
        "crypto/rand"
        "crypto/rsa"
        "crypto/x509"
        "encoding/pem"
        "bytes"
        "encoding/base64"
        "fmt"
    )
    
    func SplitSubN(s string, n int) []string {
        sub := ""
        subs := []string{}
    
        runes := bytes.Runes([]byte(s))
        l := len(runes)
        for i, r := range runes {
            sub = sub + string(r)
            if (i + 1) % n == 0 {
                subs = append(subs, sub)
                sub = ""
            } else if (i + 1) == l {
                subs = append(subs, sub)
            }
        }
    
        return subs
    }
    
    func main() {
        data := "hello"
        const publickey = `
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDw8cUnDShPMYFDZkL65Y0nUyyN
    0Nqxgz6vsFEJj3I3A1nsaQBmGC1urtO9pGJkFzaXkQo7s2y+S53qdsWNufKk8U2l
    SpiGjm4WWCucJTnYpC+nMwAAd/nmQudCtH4czJOkK4m29Tv6fUmvOtcSpQzW7zL0
    47I6qkkAadGb8CAg9wIDAQAB
    -----END PUBLIC KEY-----`
        block, _ := pem.Decode([]byte(publickey))
        pubInterface, _ := x509.ParsePKIXPublicKey(block.Bytes)
        pub := pubInterface.(*rsa.PublicKey)
        partLen := pub.N.BitLen()/8 - 11
        fmt.Println(partLen)
        chunks := SplitSubN(data, partLen)
        buffer := bytes.NewBufferString("")
        for _, chunk := range chunks {
            bytes, err := rsa.EncryptPKCS1v15(rand.Reader, pub, []byte(chunk))
            if err != nil {
                fmt.Println("", err)
            }
            buffer.Write(bytes)
        }
        fmt.Println(base64.RawURLEncoding.EncodeToString(buffer.Bytes()))
    }
    
    #=> "runNVN4ZjB_Z-aA7-7ovGP4bVPNJdKpvXpR47Wn9mdvTYqhUp1z-vN_Q_mGylXH_y423cZyipKnZDEP0dTZFGMfsNhL81NOBNG981pQZ87t9_F2mnyqsoXOR6pUL7j4VQUExMsx3caeMOc_0KkQbjGGnbSvwQ9ewtH7UQBcYiUE"
    

    然后用 ruby 解密

    private_pem = <<-EOS
    -----BEGIN PRIVATE KEY-----
    MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAPDxxScNKE8xgUNm
    QvrljSdTLI3Q2rGDPq+wUQmPcjcDWexpAGYYLW6u072kYmQXNpeRCjuzbL5Lnep2
    xY258qTxTaVKmIaObhZYK5wlOdikL6czAAB3+eZC50K0fhzMk6Qribb1O/p9Sa86
    1xKlDNbvMvTjsjqqSQBp0ZvwICD3AgMBAAECgYBjForF7JtPNkS6uyuAkzbhnUsN
    Z38I0bjN9+zbyapnBXHNz8DiO78zbaKWsyvjjchdvMBAnSFzgRWIfx/vkTE/59GF
    gfn7VLbvKMYULzbkZbh8NcwNjJLfLtNXmqt973uSiNah9JTeCHQd062VI5D64QHv
    GgKMDAJ6Z2W4jSn8gQJBAPuXT0597Z3ciY6G0EHAhHrJNieDNJboUFodQlHqpTrs
    SLmGTJVswj3Su2vi7ZEPyErHjL2vdrs1hDXKFVik+rkCQQD1KrKA7xUdYRwGnIry
    CMH+uaECSmKhnZgFVg9zCSpDEaTOjenGGVuu6sXWmJKj7PZ1pFHsPrzOCSp/3Pk6
    hmEvAkBL22NeFzn9zvDquFsyeAl5vBFH+JdyqLkRcqD8cfM/wN5skcGljBVE7rTz
    4ogepNOPOHuG9dCmwYwLa9Lj11qBAkAafynZq31BtpwbztFphS7KQ++12qo8Q1cJ
    xJpY2XW61+5S8J2Cbn0tM2x8W/MFSnf8kOzVtpYbQnxYY16AR8O7AkEAkHLKWspk
    QFWRUlliBVpJg+GHe9VI7ND3wWIbV4H1kmyt08959LBpg7cZLu06PXUShwtADaE9
    42Ta3K/fSme4Tw==
    -----END PRIVATE KEY-----
    EOS
    
    s = 'KAPye436VwAqMZ6amu9UeODAh-3dhU6KNbcVXmBU-HK_geeHjyktLzOREMvWPnLcJ7mdddPwwHPEBZfaVliCFl0o9IDIUe7JfEHvmfG7limTUyii08O2b1cBu8pAnev3BxUfDJRqqh84-66Qiiur-syQQkAdnzH-wuG3DJ_UPgo'
    rsa = OpenSSL::PKey::RSA.new(private_pem)
    rsa.private_decrypt(Base64.urlsafe_decode64(s))
    

    成功解密出 hello

    然后用 ruby 加密

    public_pem = <<-EOS
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDw8cUnDShPMYFDZkL65Y0nUyyN
    0Nqxgz6vsFEJj3I3A1nsaQBmGC1urtO9pGJkFzaXkQo7s2y+S53qdsWNufKk8U2l
    SpiGjm4WWCucJTnYpC+nMwAAd/nmQudCtH4czJOkK4m29Tv6fUmvOtcSpQzW7zL0
    47I6qkkAadGb8CAg9wIDAQAB
    -----END PUBLIC KEY-----
    EOS
    
    data = 'hello'
    rsa = OpenSSL::PKey::RSA.new(public_pem)
    Base64.urlsafe_encode64 rsa.public_encrypt(data)
    

    用上面 ruby 的解密方法也能解密

    https://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15

    https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html#method-i-public_encrypt

    https://commondatastorage.googleapis.com/chromium-boringssl-docs/rsa.h.html#RSA_PKCS1_PADDING

    https://stackoverflow.com/questions/47981709/ruby-rsa-public-key-encryption-to-golang

    结论:你写的是对的

  • 如何简单的实现按距离排序? at August 31, 2019

    mongodb,pg 应该都有基于地理位置的查询功能

  • 找小伙伴一起开发 Ruby 增量代码覆盖率工具 at August 31, 2019

    代码自测程度是指哪些方法被修改了吗?

  • rest-client 自动转换 headers 里的参数 at August 28, 2019

    https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb#L368

    如果 header 名是 symbol 格式会调用

    key = key.to_s.split(/_/).map(&:capitalize).join('-')

    可以改成

    heades: { 'appId' => 'xlkb' }

  • 关于实现一个近期热搜功能 at August 27, 2019

    我有个思路是定一个最小的时间间隔,比如每分钟的记录为一个 sortset,然后按需统计

    redis = Redis.current
    redis.zincrby("keyword:#{Time.now.strftime('%Y%m%d%H%M')}", 1, 'Ruby')
    
    # 前一个小时的统计
    hour = Time.now - 1.hour
    start_time = hour.beginning_of_hour
    end_time = hour.end_of_hour
    keys = start_time.to_i.step(end_time.to_i, 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H%M')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d%H')}", keys, aggregate: 'sum')
    
    # 前一天的统计
    day = Time.now - 1.day
    start_time = day.beginning_of_day
    end_time = day.end_of_day
    keys = start_time.to_i.step(end_time.to_i, 60 * 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d')}", keys, aggregate: 'sum')
    
    # 近一周top10关键词
    start_time = (Time.now - 1.week).beginning_of_minute
    end_time = Time.now.end_of_minute
    keys = start_time.to_i.step(end_time.to_i, 60).collect { |t| "keyword:#{Time.at(t).strftime('%Y%m%d%H%M')}" }
    redis.zunionstore("keyword:#{start_time.strftime('%Y%m%d%H%M')}-#{end_time.strftime('%Y%m%d%H%M')}", keys, aggregate: 'sum')
    redis.zrevrange("keyword:#{start_time.strftime('%Y%m%d%H%M')}-#{end_time.strftime('%Y%m%d%H%M')}", 0, 9, with_scores: true)
    
  • 想做个卡牌游戏,做好基本架构,卡牌可以让玩家参与设计,不知道大家会不会有兴趣玩? at August 08, 2019

    平衡度如何保证

  • 求教,购买 MacBook Pro 的建议 at August 06, 2019

    拼多多现在 Apple 苹果 MacBook Pro 2019 款 15.4 英寸笔记本电脑(i7、16GB、256GB、Touch Bar) 13999 元包邮

  • 请教一个关于 rails 异步长轮询的问题。 at July 31, 2019

    可以用 https://github.com/SamSaffron/message_bus

  • ImageMagick 错误咨询 at July 05, 2019

    阿里云的 oss 是不是有 qps 限制,试试本地图片

  • ImageMagick 错误咨询 at July 05, 2019

    可以尝试sleep 10,我感觉可能是处理速度跟不上

  • 找个师傅有尝写代码,Rails 项目微信支付 at July 05, 2019

    有联系方式吗,可以聊

  • 由于在数据库表中有`model_name`,导致 ActiveRecord::Relation 以及方法全都不可用 at June 24, 2019

    https://github.com/bjones/safe_attributes

  • 有什么提取页面文本内容的 gem、方法吗? at June 07, 2019

    没有万能的方法方法吧,不同的博客布局格式都不一样

  • 一次修改外键的带数据更新的 migration at June 04, 2019

    导入过程中有新的数据怎么办,更新过程中数据有改变怎么办,数据迁移就怕中间各种意外

  • 我的黑苹果终于完美了 at May 31, 2019

    恩杰 M22

  • 开发小程序时,怎么处理 CSRF 的问题? at May 16, 2019
    • Gemfile gem 'rack-cors'

    • config/initializers/cors.rb

      Rails.application.config.middleware.insert_before 0, Rack::Cors do
      allow do
      origins '*'
      
      resource '*',
      headers: :any,
        methods: [:get, :post, :put, :patch, :delete, :options, :head]
      end
      end
      
  • 求助,ActionCable 如何作为 WebSocket 客户端来使用? at May 15, 2019

    ActionCable 客户端的库就只适用于 ActionCable 服务端的数据格式,你要想实现类似 ActionCable 那样客户端的调用,就要自己去实现订阅,发消息那几个方法。

  • 我的黑苹果终于完美了 at April 28, 2019

  • Migration add_reference 多态联合索引问题 at March 18, 2019

    不是先用 user_type 确定去那个表查吗?

  • 配置文件有可能热更新么 at March 16, 2019

    Sail 这个 gem, 还有配置后台,可以实时更改配置

  • 有用 VS Code 调试 Rails 的大神么?? at March 11, 2019

    vscode ruby 插件的调试功能类似 RubyMine 那样在行首点一下就打了一个断点,不用手动输入,作用域和变量那些都有可视化窗口可以查看,已经很强大了

  • Prev
  • 1
  • 2
  • 3
  • 4
  • …
  • 14
  • 15
  • Next
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English